windows batch 常用命令



轉載: http://www.oschina.net/code/snippet_158297_4964

001 1 echo 和 @
002 回顯命令
003 @                     #關閉單行回顯
004 echo off              #從下一行開始關閉回顯
005 @echo off             #從本行開始關閉回顯。一般批處理第一行都是這個
006 echo on               #從下一行開始打開回顯
007 echo                  #顯示當前是 echo off 狀態還是 echo on 狀態
008 echo.                 #輸出一個”回車換行”,空白行
009                          #(同echo, echo; echo+ echo[ echo] echo/ echo)
010  
011 2 errorlevel
012 echo %errorlevel%
013 每個命令運行結束,可以用這個命令行格式查看返回碼
014 默認值爲0,一般命令執行出錯會設 errorlevel 爲1
015  
016 3 dir
017 顯示文件夾內容
018 dir                  #顯示當前目錄中的文件和子目錄
019 dir /a               #顯示當前目錄中的文件和子目錄,包括隱藏文件和系統文件
020 dir c: /a:d          #顯示 C 盤當前目錄中的目錄
021 dir c: /a:-d         #顯示 C 盤根目錄中的文件
022 dir c: /b/p         #/b只顯示文件名,/p分頁顯示
023 dir *.exe /s         #顯示當前目錄和子目錄裏所有的.exe文件
024  
025 4 cd
026 切換目錄
027 cd                  #進入根目錄
028 cd                   #顯示當前目錄
029 cd /d d:sdk         #可以同時更改盤符和目錄
030  
031 5 md
032 創建目錄
033 md d:abc          #如果 d:a 不存在,將會自動創建中級目錄
034 #如果命令擴展名被停用,則需要鍵入 mkdir abc。
035  
036 6 rd
037 刪除目錄
038 rd abc               #刪除當前目錄裏的 abc 子目錄,要求爲空目錄
039 rd /s/q d:temp      #刪除 d:temp 文件夾及其子文件夾和文件,/q安靜模式
040  
041 7 del
042 刪除文件
043 del d:test.txt      #刪除指定文件,不能是隱藏、系統、只讀文件
044 del /q/a/f d:temp*.*
045 刪除 d:temp 文件夾裏面的所有文件,包括隱藏、只讀、系統文件,不包括子目錄
046 del /q/a/f/s d:temp*.*
047 刪除 d:temp 及子文件夾裏面的所有文件,包括隱藏、只讀、系統文件,不包括子目錄
048  
049 8 ren
050 重命名命令
051 ren d:temp tmp      #支持對文件夾的重命名
052  
053 9 cls
054 清屏
055  
056 10 type
057 顯示文件內容
058 type c:boot.ini     #顯示指定文件的內容,程序文件一般會顯示亂碼
059 type *.txt           #顯示當前目錄裏所有.txt文件的內容
060  
061 11 copy
062 拷貝文件
063 copy c:test.txt d:test.bak
064 複製 c:test.txt 文件到 d: ,並重命名爲 test.bak
065 copy con test.txt
066 從屏幕上等待輸入,按 Ctrl+Z 結束輸入,輸入內容存爲test.txt文件
067 con代表屏幕,prn代表打印機,nul代表空設備
068 copy 1.txt + 2.txt 3.txt
069 合併 1.txt 和 2.txt 的內容,保存爲 3.txt 文件
070 如果不指定 3.txt ,則保存到 1.txt
071 copy test.txt +
072 複製文件到自己,實際上是修改了文件日期
073  
074 12 title
075 設置cmd窗口的標題
076 title 新標題         #可以看到cmd窗口的標題欄變了
077  
078 13 ver
079 顯示系統版本
080  
081 14 label 和 vol
082 設置卷標
083 vol                  #顯示卷標
084 label                #顯示卷標,同時提示輸入新卷標
085 label c:system       #設置C盤的卷標爲 system
086  
087 15 pause
088 暫停命令
089  
090 16 rem 和 ::
091 註釋命令
092 註釋行不執行操作
093  
094 17 date time
095 日期和時間
096 date           #顯示當前日期,並提示輸入新日期,按"回車"略過輸入
097 date/t         #只顯示當前日期,不提示輸入新日期
098 time           #顯示當前時間,並提示輸入新時間,按"回車"略過輸入
099 time/t         #只顯示當前時間,不提示輸入新時間
100  
101 18 goto 和 :
102 跳轉命令
103 :label         #行首爲:表示該行是標籤行,標籤行不執行操作
104 goto label     #跳轉到指定的標籤那一行
105  
106 19 find (外部命令)
107 查找命令
108 find "abc" c:test.txt
109 在 c:test.txt 文件裏查找含 abc 字符串的行
110 如果找不到,將設 errorlevel 返回碼爲1
111 find /i “abc” c:test.txt
112 查找含 abc 的行,忽略大小寫
113 find /c "abc" c:test.txt
114 顯示含 abc 的行的行數
115  
116 20 more (外部命令)
117 逐屏顯示
118 more c:test.txt     #逐屏顯示 c:test.txt 的文件內容
119  
120 21 tree
121 顯示目錄結構
122 tree d:             #顯示D盤的文件目錄結構
123  
124 22 &
125 順序執行多條命令,而不管命令是否執行成功
126  
127 23 &&
128 順序執行多條命令,當碰到執行出錯的命令後將不執行後面的命令
129 find "ok" c:test.txt && echo 成功
130 如果找到了"ok"字樣,就顯示"成功",找不到就不顯示
131  
132 24 ||
133 順序執行多條命令,當碰到執行正確的命令後將不執行後面的命令
134 find "ok" c:test.txt || echo 不成功
135 如果找不到"ok"字樣,就顯示"不成功",找到了就不顯示
136  
137 25 |
138 管道命令
139 dir *.* /s/a | find /c ".exe"
140 管道命令表示先執行 dir 命令,對其輸出的結果執行後面的 find 命令
141 該命令行結果:輸出當前文件夾及所有子文件夾裏的.exe文件的個數
142 type c:test.txt|more
143 這個和 more c:test.txt 的效果是一樣的
144  
145 26 > 和 >>
146 輸出重定向命令
147 > 清除文件中原有的內容後再寫入
148 >> 追加內容到文件末尾,而不會清除原有的內容
149 主要將本來顯示在屏幕上的內容輸出到指定文件中
150 指定文件如果不存在,則自動生成該文件
151 type c:test.txt >prn
152 屏幕上不顯示文件內容,轉向輸出到打印機
153 echo hello world>con
154 在屏幕上顯示hello world,實際上所有輸出都是默認 >con 的
155 copy c:test.txt f: >nul
156 拷貝文件,並且不顯示"文件複製成功"的提示信息,但如果f盤不存在,還是會顯示出錯信息
157 copy c:test.txt f: >nul 2>nul
158 不顯示”文件複製成功”的提示信息,並且f盤不存在的話,也不顯示錯誤提示信息
159 echo ^^W ^> ^W>c:test.txt
160 生成的文件內容爲 ^W > W
161 ^ 和 > 是控制命令,要把它們輸出到文件,必須在前面加個 ^ 符號
162  
163 27 <
164 從文件中獲得輸入信息,而不是從屏幕上
165 一般用於 date time label 等需要等待輸入的命令
166 @echo off
167 echo 2005-05-01>temp.txt
168 date <temp.txt
169 del temp.txt
170 這樣就可以不等待輸入直接修改當前日期
171  
172 28 %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*
173 命令行傳遞給批處理的參數
174 %0 批處理文件本身
175 %1 第一個參數
176 %9 第九個參數
177 %* 從第一個參數開始的所有參數
178  
179 批參數(%n)的替代已被增強。您可以使用以下語法:
180  
181      %~1          - 刪除引號("),擴充 %1
182      %~f1         - 將 %1 擴充到一個完全合格的路徑名
183      %~d1         - 僅將 %1 擴充到一個驅動器號
184      %~p1         - 僅將 %1 擴充到一個路徑
185      %~n1         - 僅將 %1 擴充到一個文件名
186      %~x1         - 僅將 %1 擴充到一個文件擴展名
187      %~s1         - 擴充的路徑指含有短名
188      %~a1         - 將 %1 擴充到文件屬性
189      %~t1         - 將 %1 擴充到文件的日期/時間
190      %~z1         - 將 %1 擴充到文件的大小
191      %~$PATH : 1 - 查找列在 PATH 環境變量的目錄,並將 %1
192                    擴充到找到的第一個完全合格的名稱。如果環境
193                    變量名未被定義,或者沒有找到文件,此組合鍵會
194                    擴充到空字符串
195  
196 可以組合修定符來取得多重結果:
197  
198     %~dp1        - 只將 %1 擴展到驅動器號和路徑
199     %~nx1        - 只將 %1 擴展到文件名和擴展名
200     %~dp$PATH:1 - 在列在 PATH 環境變量中的目錄裏查找 %1,
201                    並擴展到找到的第一個文件的驅動器號和路徑。
202     %~ftza1      - 將 %1 擴展到類似 DIR 的輸出行。
203 可以參照 call/? 或 for/? 看出每個參數的含意
204 echo load "%%1" "%%2">c:test.txt
205 生成的文件內容爲 load "%1" "%2"
206 批處理文件裏,用這個格式把命令行參數輸出到文件
207  
208 29 if
209 判斷命令
210 if "%1"=="/a" echo 第一個參數是/a
211 if /i "%1" equ "/a" echo 第一個參數是/a
212 /i 表示不區分大小寫,equ 和 == 是一樣的,其它運算符參見 if/?
213 if exist c:test.bat echo 存在c:test.bat文件
214 if not exist c:windows (
215      echo 不存在c:windows文件夾
216      )
217 if exist c:test.bat (
218      echo 存在c:test.bat
219      ) else (
220      echo 不存在c:test.bat
221      )
222  
223 30 setlocal 和 endlocal
224 設置”命令擴展名”和”延緩環境變量擴充”
225 SETLOCAL ENABLEEXTENSIONS             #啓用"命令擴展名"
226 SETLOCAL DISABLEEXTENSIONS            #停用"命令擴展名"
227 SETLOCAL ENABLEDELAYEDEXPANSION       #啓用"延緩環境變量擴充"
228 SETLOCAL DISABLEDELAYEDEXPANSION      #停用"延緩環境變量擴充"
229 ENDLOCAL                              #恢復到使用SETLOCAL語句以前的狀態
230 “命令擴展名”默認爲啓用
231 “延緩環境變量擴充”默認爲停用
232 批處理結束系統會自動恢復默認值
233 可以修改註冊表以禁用"命令擴展名",詳見 cmd /? 。所以用到"命令擴展名"的程
234 序,建議在開頭和結尾加上 SETLOCAL ENABLEEXTENSIONS 和 ENDLOCAL 語句,以確
235 保程序能在其它系統上正確運行
236 "延緩環境變量擴充"主要用於 if for 的符合語句,在 set 的說明裏有其實用例程
237  
238 31 set
239 設置變量
240 引用變量可在變量名前後加 % ,即 %變量名%
241 set                     #顯示目前所有可用的變量,包括系統變量和自定義的變量
242 echo %SystemDrive%      #顯示系統盤盤符。系統變量可以直接引用
243 set p                   #顯示所有以p開頭的變量,要是一個也沒有就設errorlevel=1
244 set p=aa1bb1aa2bb2      #設置變量p,並賦值爲 = 後面的字符串,即aa1bb1aa2bb2
245 echo %p%                #顯示變量p代表的字符串,即aa1bb1aa2bb2
246 echo %p:~6%             #顯示變量p中第6個字符以後的所有字符,即aa2bb2
247 echo %p:~6,3%           #顯示第6個字符以後的3個字符,即aa2
248 echo %p:~0,3%           #顯示前3個字符,即aa1
249 echo %p:~-2%            #顯示最後面的2個字符,即b2
250 echo %p:~0,-2%          #顯示除了最後2個字符以外的其它字符,即aa1bb1aa2b
251 echo %p:aa=c%           #用c替換變量p中所有的aa,即顯示c1bb1c2bb2
252 echo %p:aa=%            #將變量p中的所有aa字符串置換爲空,即顯示1bb12bb2
253 echo %p:*bb=c%          #第一個bb及其之前的所有字符被替換爲c,即顯示c1aa2bb2
254 set p=%p:*bb=c%         #設置變量p,賦值爲 %p:*bb=c% ,即c1aa2bb2
255 set /a p=39             #設置p爲數值型變量,值爲39
256 set /a p=39/10          #支持運算符,有小數時用去尾法,39/10=3.9,去尾得3,p=3
257 set /a p=p/10           #用 /a 參數時,在 = 後面的變量可以不加%直接引用
258 set /a p=”1&0″          #”與”運算,要加引號。其它支持的運算符參見set/?
259 set p=                  #取消p變量
260 set /p p=請輸入
261 屏幕上顯示”請輸入”,並會將輸入的字符串賦值給變量p
262 注意這條可以用來取代 choice 命令
263 注意變量在 if for 的複合語句裏是一次性全部替換的,如
264 @echo off
265 set p=aaa
266 if %p%==aaa (
267      echo %p%
268      set p=bbb
269      echo %p%
270      )
271 結果將顯示
272 aaa
273 aaa
274 因爲在讀取 if 語句時已經將所有 %p% 替換爲aaa
275 這裏的"替換",在 /? 幫助裏就是指"擴充""環境變量擴充"
276 可以啓用”延緩環境變量擴充”,用 ! 來引用變量,即 !變量名!
277 @echo off
278 SETLOCAL ENABLEDELAYEDEXPANSION
279 set p=aaa
280 if %p%==aaa (
281      echo %p%
282      set p=bbb
283      echo !p!
284      )
285 ENDLOCAL
286 結果將顯示
287 aaa
288 bbb
289 還有幾個動態變量,運行 set 看不到
290 %CD%                   #代表當前目錄的字符串
291 %DATE%                 #當前日期
292 %TIME%                 #當前時間
293 %RANDOM%               #隨機整數,介於0~32767
294 %ERRORLEVEL%           #當前 ERRORLEVEL 值
295 %CMDEXTVERSION%        #當前命令處理器擴展名版本號
296 %CMDCMDLINE%           #調用命令處理器的原始命令行
297 可以用echo命令查看每個變量值,如 echo %time%
298 注意 %time% 精確到毫秒,在批處理需要延時處理時可以用到
299  
300 32 start
301 批處理中調用外部程序的命令,否則等外部程序完成後才繼續執行剩下的指令
302  
303 33 call
304 批處理中調用另外一個批處理的命令,否則剩下的批處理指令將不會被執行
305 有時有的應用程序用start調用出錯的,也可以call調用
306  
307 34 choice (外部命令)
308 選擇命令
309 讓用戶輸入一個字符,從而選擇運行不同的命令,返回碼errorlevel爲1234……
310 win98裏是choice.com
311 win2000pro裏沒有,可以從win98裏拷過來
312 win2003裏是choice.exe
313 choice /N /C y /T 5 /D y>nul
314 延時5秒
315  
316 35 assoc 和 ftype
317 文件關聯
318 assoc 設置'文件擴展名'關聯,關聯到'文件類型'
319 ftype 設置'文件類型'關聯,關聯到'執行程序和參數'
320 當你雙擊一個.txt文件時,windows並不是根據.txt直接判斷用 notepad.exe 打開
321 而是先判斷.txt屬於 txtfile '文件類型'
322 再調用 txtfile 關聯的命令行 txtfile=%SystemRoot%system32NOTEPAD.EXE %1
323 可以在"文件夾選項""文件類型"裏修改這2種關聯
324 assoc            #顯示所有'文件擴展名'關聯
325 assoc .txt       #顯示.txt代表的'文件類型',結果顯示 .txt=txtfile
326 assoc .doc       #顯示.doc代表的'文件類型',結果顯示 .doc=Word.Document.8
327 assoc .exe       #顯示.exe代表的'文件類型',結果顯示 .exe=exefile
328 ftype            #顯示所有'文件類型'關聯
329 ftype exefile    #顯示exefile類型關聯的命令行,結果顯示 exefile="%1" %*
330 assoc .txt=Word.Document.8
331 設置.txt爲word類型的文檔,可以看到.txt文件的圖標都變了
332 assoc .txt=txtfile
333 恢復.txt的正確關聯
334 ftype exefile="%1" %*
335 恢復 exefile 的正確關聯
336 如果該關聯已經被破壞,可以運行 command.com ,再輸入這條命令
337  
338 36 pushd popd
339 切換當前目錄
340 @echo off
341 c: & cd & md mp3        #在 C: 建立 mp3 文件夾
342 md d:mp4                #在 D: 建立 mp4 文件夾
343 cd /d d:mp4             #更改當前目錄爲 d:mp4
344 pushd c:mp3             #保存當前目錄,並切換當前目錄爲 c:mp3
345 popd                     #恢復當前目錄爲剛纔保存的 d:mp4
346  
347 37 for
348 循環命令
349 這個比較複雜,請對照 for/? 來看
350 for %%i in (c: d: e: f:) do echo %%i
351 依次調用小括號裏的每個字符串,執行 do 後面的命令
352 注意%%i,在批處理中 for 語句調用參數用2個%
353 默認的字符串分隔符是"空格鍵""Tab鍵""回車鍵"
354 for %%i in (*.txt) do find "abc" %%i
355 對當前目錄裏所有的txt文件執行 find 命令
356 for /r . %%i in (*.txt) do find "abc" %%i
357 在當前目錄和子目錄裏所有的.txt文件中搜索包含 abc 字符串的行
358 for /r . %%i in (.) do echo %%~pni
359 顯示當前目錄名和所有子目錄名,包括路徑,不包括盤符
360 for /r d:mp3 %%i in (*.mp3) do echo %%i>>d:mp3.txt
361 把 d:mp3 及其子目錄裏的mp3文件的文件名都存到 d:mp3.txt 裏去
362 for /l %%i in (2,1,8) do echo %%i
363 生成2345678的一串數字,2是數字序列的開頭,8是結尾,1表示每次加1
364 for /f %%i in ('set') do echo %%i
365 set 命令的輸出結果循環調用,每行一個
366 for /f "eol=P" %%i in ('set') do echo %%i
367 set 命令的輸出結果,忽略以 P 開頭的那幾行
368 for /f %%i in (d:mp3.txt) do echo %%i
369 顯示 d:mp3.txt 裏的每個文件名,每行一個,不支持帶空格的名稱
370 for /f "delims=" %%i in (d:mp3.txt) do echo %%i
371 顯示 d:mp3.txt 裏的每個文件名,每行一個,支持帶空格的名稱
372 for /f "skip=5 tokens=4" %%a in ('dir') do echo %%a
373 dir 命令的結果,跳過前面5行,餘下的每行取第4列
374 每列之間的分隔符爲默認的"空格"
375 可以注意到 dir 命令輸出的前5行是沒有文件名的
376 for /f "tokens=1,2,3 delims=- " %%a in ('date /t') do (
377      echo %%a
378      echo %%b
379      echo %%c
380      )
381 date /t 的輸出結果,每行取1、2、3列
382 第一列對應指定的 %%a ,後面的 %%b 和 %%c 是派生出來的,對應其它列
383 分隔符指定爲 - 和"空格",注意 delims=- 後面有個"空格"
384 其中 tokens=1,2,3 若用 tokens=1-3 替換,效果是一樣的
385 for /f "tokens=2* delims=- " %%a in ('date /t') do echo %%b
386 取第2列給 %%a ,其後的列都給 %%b
387  
388 38 subst (外部命令)
389 映射磁盤。
390 subst z: serverd      #這樣輸入z:就可以訪問serverd了
391 subst z: /d              #取消該映射
392 subst                    #顯示目前所有的映時
393  
394 39   xcopy (外部命令)
395 文件拷貝
396 xcopy d:mp3 e:mp3 /s/e/i/y
397 複製 d:mp3 文件夾、所有子文件夾和文件到 e: ,覆蓋已有文件
398 加 /i 表示如果 e: 沒有 mp3 文件夾就自動新建一個,否則會有詢問
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章