re: 常用的bat命令和用法 zml_cnnk 2010-04-24 22:39
--date
--time
--篩選器命令傳遞信息
more 命令每次顯示一屏文件內容或命令輸出。
find 命令在文件和命令輸出中搜索指定字符。
sort 命令按字母順序排列文件和命令輸出。
要將輸入從文件發送到篩選器命令,請使用小于符號 (<)。如果要篩選器命令從其他命令獲得輸入,請使用管道 (|)。
--more
more < list.txt
tree c:\ | more
/c 顯示頁面前清除屏幕。
/p 擴展換頁符。
/s 將多個空白行更改為一個空白行。
/tn 將制表位更改為 n 個空格
+n 顯示由 n 指定的行開始的第一個文件。
以下命令在 more 提示 (-- More --) 下接受。
space 顯示下一頁。
ENTER 顯示下一行。
F 顯示下一個文件。
q 退出。
? 顯示可用命令。
= 顯示行號。
P n 顯示以下 n 行。
S n 跳過下面 n 行。
--find
/v 顯示未包含指定字符串的所有行。
/c 只顯示包含指定字符串的行數。
/n 將文件行號置于每行開頭。
/I 指定搜索不區分大小寫
顯示每個包含該文本的行
文件名區分大小寫
find "Pacific Rim" < trade.txt > nwtrade.txt
搜索C盤上的每個目錄以查找包含“Log”字符串的文件名,并且每次顯示一屏:dir c:\ /s /b | find "LOG" | more
--sort
按字母順序排列
sort < list.txt > alphlist.txt
/r 顛倒排序順序,即從 Z 到 A 排序,然后從 9 到 0 排序。
/+n 指定字符位置號n,sort 在此處開始每次比較。例如,/+3 表示每次比較在每行的第三個字符開始。少于 n 個字符的行在其他行之前排序。默認情況下,比較在每行的第一個字符開始。
re: 常用的bat命令和用法 zml_cnnk 2010-04-19 00:45
優先級(實驗結果)
&& > || > &
re: 常用的bat命令和用法 zml_cnnk 2010-04-19 00:02
顯示、設置或刪除 cmd.exe 環境變量。
SET [variable=[string]]
variable 指定環境變量名。
string 指定要指派給變量的一系列字符串。
要顯示當前環境變量,鍵入不帶參數的 SET。
如果命令擴展被啟用,SET 會如下改變:
可僅用一個變量激活 SET 命令,等號或值不顯示所有前綴匹配
SET 命令已使用的名稱的所有變量的值。例如:
SET P
會顯示所有以字母 P 打頭的變量
如果在當前環境中找不到該變量名稱,SET 命令將把 ERRORLEVEL
設置成 1。
SET 命令不允許變量名含有等號。
在 SET 命令中添加了兩個新命令行開關:
SET /A expression
SET /P variable=[promptString]
/A 命令行開關指定等號右邊的字符串為被評估的數字表達式。該表達式
評估器很簡單并以遞減的優先權順序支持下列操作:
() - 分組
! ~ - - 一元運算符
* / % - 算數運算符
+ - - 算數運算符
<< >> - 邏輯移位
- 按位“與”
^ - 按位“異”
| - 按位“或”
= *= /= %= += -= - 賦值
&= ^= |= <<= >>=
, - 表達式分隔符
如果您使用任何邏輯或取余操作符, 您需要將表達式字符串用
引號擴起來。在表達式中的任何非數字字符串鍵作為環境變量
名稱,這些環境變量名稱的值已在使用前轉換成數字。如果指定
了一個環境變量名稱,但未在當前環境中定義,那么值將被定為
零。這使您可以使用環境變量值做計算而不用鍵入那些 % 符號
來得到它們的值。如果 SET /A 在命令腳本外的命令行執行的,
那么它顯示該表達式的最后值。該分配的操作符在分配的操作符
左邊需要一個環境變量名稱。除十六進制有 0x 前綴,八進制
有 0 前綴的,數字值為十進位數字。因此,0x12 與 18 和 022
相同。請注意八進制公式可能很容易搞混: 08 和 09 是無效的數字,
因為 8 和 9 不是有效的八進制位數。(& )
/P 命令行開關允許將變量數值設成用戶輸入的一行輸入。讀取輸入
行之前,顯示指定的 promptString。promptString 可以是空的。
環境變量替換已如下增強:
%PATH:str1=str2%
會擴展 PATH 環境變量,用 "str2" 代替擴展結果中的每個 "str1"。
要有效地從擴展結果中刪除所有的 "str1","str2" 可以是空的。
"str1" 可以以星號打頭;在這種情況下,"str1" 會從擴展結果的
開始到 str1 剩余部分第一次出現的地方,都一直保持相配。
也可以為擴展名指定子字符串。
%PATH:~10,5%
會擴展 PATH 環境變量,然后只使用在擴展結果中從第 11 個(偏
移量 10)字符開始的五個字符。如果沒有指定長度,則采用默認
值,即變量數值的余數。如果兩個數字(偏移量和長度)都是負數,
使用的數字則是環境變量數值長度加上指定的偏移量或長度。
%PATH:~-10%
會提取 PATH 變量的最后十個字符。
%PATH:~0,-2%
會提取 PATH 變量的所有字符,除了最后兩個。
終于添加了延遲環境變量擴充的支持。該支持總是按默認值被
停用,但也可以通過 CMD.EXE 的 /V 命令行開關而被啟用/停用。
請參閱 CMD /?
考慮到讀取一行文本時所遇到的目前擴充的限制時,延遲環境
變量擴充是很有用的,而不是執行的時候。以下例子說明直接
變量擴充的問題:
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "%VAR%" == "after" @echo If you see this, it worked
)
不會顯示消息,因為在讀到第一個 IF 語句時,BOTH IF 語句中
的 %VAR% 會被代替;原因是: 它包含 IF 的文體,IF 是一個
復合語句。所以,復合語句中的 IF 實際上是在比較 "before" 和
"after",這兩者永遠不會相等。同樣,以下這個例子也不會達到
預期效果:
set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%
原因是,它不會在目前的目錄中建立一個文件列表,而只是將
LIST 變量設成找到的最后一個文件。這也是因為 %LIST% 在
FOR 語句被讀取時,只被擴充了一次;而且,那時的 LIST 變量
是空的。因此,我們真正執行的 FOR 循環是:
for %i in (*) do set LIST= %i
這個循環繼續將 LIST 設成找到的最后一個文件。
延遲環境變量擴充允許您使用一個不同的字符(驚嘆號)在執行
時間擴充環境變量。如果延遲的變量擴充被啟用,可以將上面
例子寫成以下所示,以達到預期效果:
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "!VAR!" == "after" @echo If you see this, it worked
)
set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%
如果命令擴展被啟用,有幾個動態環境變量可以被擴展,但
不會出現在 SET 顯示的變量列表中。每次變量數值被擴展時,
這些變量數值都會被動態計算。如果用戶用這些名稱中任何
一個定義變量,那個定義會替代下面描述的動態定義:
%CD% - 擴展到當前目錄字符串。
%DATE% - 用跟 DATE 命令同樣的格式擴展到當前日期。
%TIME% - 用跟 TIME 命令同樣的格式擴展到當前時間。
%RANDOM% - 擴展到 0 和 32767 之間的任意十進制數字。
%ERRORLEVEL% - 擴展到當前 ERRORLEVEL 數值。
%CMDEXTVERSION% - 擴展到當前命令處理器擴展版本號。
%CMDCMDLINE% - 擴展到調用命令處理器的原始命令行。
re: 常用的bat命令和用法 zml_cnnk 2010-04-18 22:51
其他特殊符號:
1.符號>>
與符號>相似,但區別在于>>是傳遞并在文件末尾追加。>>也可將回顯傳遞給控制臺。
2.符號|
|是一個管道傳輸命令意思,是將上一命令執行的結果傳遞給下一命令去處理。
例如:
dir d:\|find "1508"
以上命令的意思為查找d:\的所有,并尋找1508字符串。
3.符號,
在某些特殊的情況下可以用,來代替空格使用。
4.符號;
當命令相同的時候,可以將不同的目標用;隔離開來,但執行效果不變。如執行過程中發生錯誤,則只返回錯誤報告。
例:
DIR C:\;D:\;E:\F:\
以上的命令相當于
DIR C:\
DIR D:\
DIR E:\
DIR F:\
re: 常用的bat命令和用法 zml_cnnk 2010-04-15 23:40
^ 轉義符 : 用在特殊符號之前
比如:
echo ^&
----------------
|| 連接符 : 當前面的命令沒有成功執行 則執行后面的命令
比如:
echo 0123456 | find "789" || echo 字符中沒有789
----------------
&& 連接符 : 當前面的命令成功執行 再執行后面的命令
比如:
echo 0123456 | find "123" && echo 字符中含有123
----------------
& 連接符 : 無論前面的命令是否成功執行 都執行后面的
比如:
echo 0123456 | find "789" & echo 字符中含有123
雖然沒有成功到789 但還是會執行echo 命令
re: 常用的bat命令和用法 zml_cnnk 2010-04-15 21:25
for幫助:
FOR %variable IN (set) DO command [command-parameters]
%variable 指定一個單一字母可替換的參數。
(set) 指定一個或一組文件。可以使用通配符。
command 指定對每個文件執行的命令。
command-parameters 為特定命令指定參數或命令行開關。
在批處理程序中使用 FOR 命令時,指定變量請使用 %%variable而不要用 %variable。變量名稱是區分大小寫的,所以 %i 不同于 %I.
如果啟用命令擴展,則會支持下列 FOR 命令的其他格式:
FOR /D %variable IN (set) DO command [command-parameters]。
如果集中包含通配符,則指定與目錄名匹配,而不與文件名匹配
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
檢查以 [drive:]path 為根的目錄樹,指向每個目錄中的 FOR 語句。如果在 /R 后沒有指定目錄規范,則使用當前目錄。如果集僅為一個單點(.)字符,則枚舉該目錄樹。
FOR /L %variable IN (start,step,end) DO command [command-parameters]
該集表示以增量形式從開始到結束的一個數字序列。因此,(1,1,5)將產生序列 1 2 3 4 5,(5,-1,1)將產生序列(5 4 3 2 1)
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
或者,如果有 usebackq 選項:
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
fileset 為一個或多個文件名。繼續到 fileset 中的下一個文件之前,每份文件都被打開、讀取并經過處理。處理包括讀取文件,將其分成一行行的文字,然后將每行解析成零或更多的符號。然后用已找到的符號字符串變量值調用 For 循環。以默認方式,/F 通過每個文件的每一行中分開的第一個空白符號。跳過空白行。您可通過指定可選 "options" 參數替代默認解析操作。這個帶引號的字符串包括一個
或多個指定不同解析選項的關鍵字。這些關鍵字為:
eol=c - 指一個行注釋字符的結尾(就一個)
skip=n - 指在文件開始時忽略的行數。
delims=xxx - 指分隔符集。這個替換了空格和跳格鍵的
默認分隔符集。
tokens=x,y,m-n - 指每行的哪一個符號被傳遞到每個迭代
的 for 本身。這會導致額外變量名稱的分配。m-n
格式為一個范圍。通過 nth 符號指定 mth。如果
符號字符串中的最后一個字符星號,
那么額外的變量將在最后一個符號解析之后
分配并接受行的保留文本。
usebackq - 指定新語法已在下類情況中使用:
在作為命令執行一個后引號的字符串并且一個單
引號字符為文字字符串命令并允許在 file-set
中使用雙引號擴起文件名稱。
某些范例可能有助:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
會分析 myfile.txt 中的每一行,忽略以分號打頭的那些行,將每行中的第二個和第三個符號傳遞給 for 函數體,用逗號和/或空格分隔符號。請注意,此 for 函數體的語句引用 %i 來獲得第二個符號,引用 %j 來獲得第三個符號,引用 %k來獲得第三個符號后的所有剩余符號。對于帶有空格的文件名,您需要用雙引號將文件名括起來。為了用這種方式來使用雙引號,還需要使用 usebackq 選項,否則,雙引號會被理解成是用作定義某個要分析的字符串的。%i 在 for 語句中顯式聲明,%j 和 %k 是通過tokens= 選項隱式聲明的。可以通過 tokens= 一行指定最多 26 個符號,只要不試圖聲明一個高于字母 "z" 或"Z" 的變量。請記住,FOR 變量是單一字母、分大小寫和全局的變量;而且,不能同時使用超過 52 個。
還可以在相鄰字符串上使用 FOR /F 分析邏輯,方法是,用單引號將括號之間的 file-set 括起來。這樣,該字符串會被當作一個文件中的一個單一輸入行進行解析。
最后,可以用 FOR /F 命令來分析命令的輸出。方法是,將括號之間的 file-set 變成一個反括字符串。該字符串會被當作命令行,傳遞到一個子 CMD.EXE,其輸出會被捕獲到內存中,并被當作文件分析。如以下例子所示:
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
會枚舉當前環境中的環境變量名稱。
另外,FOR 變量參照的替換已被增強。您現在可以使用下列
選項語法:
%~I - 刪除任何引號("),擴展 %I
%~fI - 將 %I 擴展到一個完全合格的路徑名
%~dI - 僅將 %I 擴展到一個驅動器號
%~pI - 僅將 %I 擴展到一個路徑
%~nI - 僅將 %I 擴展到一個文件名
%~xI - 僅將 %I 擴展到一個文件擴展名
%~sI - 擴展的路徑只含有短名
%~aI - 將 %I 擴展到文件的文件屬性
%~tI - 將 %I 擴展到文件的日期/時間
%~zI - 將 %I 擴展到文件的大小
%~$PATH:I - 查找列在路徑環境變量的目錄,并將 %I 擴展
到找到的第一個完全合格的名稱。如果環境變量名
未被定義,或者沒有找到文件,此組合鍵會擴展到
空字符串
可以組合修飾符來得到多重結果:
%~dpI - 僅將 %I 擴展到一個驅動器號和路徑
%~nxI - 僅將 %I 擴展到一個文件名和擴展名
%~fsI - 僅將 %I 擴展到一個帶有短名的完整路徑名
%~dp$PATH:I - 搜索列在路徑環境變量的目錄,并將 %I 擴展
到找到的第一個驅動器號和路徑。
%~ftzaI - 將 %I 擴展到類似輸出線路的 DIR
在以上例子中,%I 和 PATH 可用其他有效數值代替。%~ 語法用一個有效的 FOR 變量名終止。選取類似 %I 的大寫變量名比較易讀,而且避免與不分大小寫的組合鍵混淆。
re: typedef(C++) zml_cnnk 2009-11-25 22:26
提到了register關鍵字,這個東西用來強制規定變量存入寄存器。但是現在的編譯器基本不會鳥這樣的定義@@,所以寫了也沒什么用處,沒必要用。
re: struct和class區別(C++) zml_cnnk 2009-11-25 21:37
不好意思讓大家迷惑了。我也不記得之前怎么想的了@@
struct在c++中用到的非常少了,原因就是除了1、2條之外和class沒有區別(不過我確實沒用過struct)。
re: 多重繼承(C++) zml_cnnk 2009-11-25 21:32
即使是虛擬繼承,也很難解決多重繼承的二義性,因為即使解決了成員變量的二義性問題,為了產生多態效果的函數結構也會產生二義性,而且此時多態的函數之間是獨立的。
re: Void and void pointer zml_cnnk 2009-11-25 20:00
@OwnWaterloo
就是這個問題。實在是受教了,謝謝!
re: Void and void pointer zml_cnnk 2009-11-25 00:53
@OwnWaterloo
問題在于,在模板中使用void*來配對不同類型的指針,如果我希望的是析構,那么,使用delete ptr會出現warning,而且意義上也許也是有問題的,這樣的話,如何正確達到我的目的呢?
re: Void and void pointer zml_cnnk 2009-11-23 13:36
@OwnWaterloo
多謝補充,受教了 ^ ^
對于規則四,如果聲明為void* 的參數(例如a)在函數中要進行delete操作(delete a),會有warning,而且意義上比較復雜,對此有沒有什么建議?其實我只是針對與void*的delete,模板中總會有void*的寫法,而對于其delete的問題頭痛了我幾天了。
re: [2008年10月22日]揚訊筆試和群碩面試 zml_cnnk 2009-02-22 12:15
@新手
我是C/C++方向的,java不是我的長項,所以當時我選擇的是C題目。像這樣的手機游戲制作公司,也許側重于手機上的Java應用吧,具體的我也不是很了解,不好意思~
re: [2008年10月22日]揚訊筆試和群碩面試 zml_cnnk 2008-11-06 00:54
@Xw.Y
好~~我去拖~~呵呵,你也是做游戲的嗎?
re: [2008年10月22日]揚訊筆試和群碩面試 zml_cnnk 2008-11-06 00:17
@Xw.Y
謝謝,呵呵!!我現在其實收到了維塔士公司的offer,不過比較早,11月中旬就要給答復~~謝謝你的建議~~
re: [2008年10月22日]揚訊筆試和群碩面試 zml_cnnk 2008-11-05 20:37
@dddddd
我到現在仍然不知道區別。我沒有做過游戲程序,沒法做對比。你知道不??
re: 程序員,如何規劃你的一生? zml_cnnk 2008-10-27 15:56
其實我一直不認同CS畢業的學生不去搞技術,但是我偶爾也會有這樣的迷茫。怎么辦?我還沒畢業,還什么都不了解呢。
re: 計算二進制位"1"的個數 zml_cnnk 2008-10-27 10:06
@Condor
這個題目是從《程序員面試寶典》看到的。微軟面試的東西很廣泛,不過都還算基礎。但是我沒有過筆試……