1. 程式人生 > >cmd基本使用方法和命令總結

cmd基本使用方法和命令總結

註釋命令
::
rem

1-cmd:獲取當前路徑:
set cur_path=%cd%
echo %cur_path%

2-cmd:設定cmd視窗標題
title name

3-cmd:寫資料到當前目錄下的檔案
echo %time% > %cd%\record.txt
echo start >> %cd%\record

備註:如果目錄有空格,需要將%cd%用引號括起來 例如:"%cd%"

4-cmd:計數
set count = 1
set /a count = count + 1
echo %count%

5-cmd:loop迴圈使用
:loop
echo time > test.txt
if %j%== %n% goto end 
goto loop
:end

6-cmd:算數運算
set count = 10
set /a %count% /2 [除法,結果是5]
set /a %count% /%2 [取餘,結果是0]

備註:cmd指令碼中取餘要用2個% , 例如[set /a f = %count% %% 2]

7-cmd:設定時間等待
ping 127.0.0.1 > nul

8-cmd:取日期
set datetime = %date:~0,10% //從第0位開始,取10位字元 
set year = %date:~0,4%【2016】
set month = %date:~5,2%【11】
set day = %date:~8,2%【02】
echo %time%【15:14:08.98】

for /f "tokens=1-3 delims=/" %%a in ('date /t') do (set mydate=%%a-%%b-%%c)
說明:取前123個引數,使用“/” 分割, 必須使用單引號, %%a 是顯示申明, %%b %%c 是隱式宣告的引數,必須是連續的字元

9-cmd:for迴圈的使用:
計數
for /l %%a in (1,1,5) do echo %%a


讀檔案和目錄
for %%i in (a.txt) do echo %%i //沒有加引數只會顯示a.txt這個名字,不會顯示內容
for /f %%i in (a.txt) do echo %%i //加了/f這個引數會讀出a.txt檔案的內容
以上是以檔案的一行作為一個%%i輸出的

如果需要將一行分解成更小的內容處理,需要配合使用tokens 和 delims 了
例如:
for /f "delims= " %%i in (a.txt) do echo %%i //以空格分隔,%%i顯示分隔後的第一個元素
for /f "tokens=2 delims= " in (a.txt) do echo %%i //以空格分隔,%%i顯示分隔後的第二個元素
注意:tokens後面必須有個空格,而且tokens引數必須在delims的前面

備註:tokens支援萬用字元
tokens=2-3
tokens=2,3
tokens=* //全部

skip引數是忽略檔案前n行
eol引數是指定當一行以什麼符號開始就忽略它
例如:
for /f "skip=1 tokens=* delims= " in (a.txt) do echo %%i //tokens必須等於* ,不然只會去每行的第一個引數

10-cmd:查詢當前資料夾中指定型別檔案中的異常關鍵字
列出指定型別檔案的命令
dir /b "*.txt" // /b引數可以列出完整的路徑

for /f "tokens=*" %%f in ('dir /b "*.txt"') do (
findstr /n /c: "CRASH" /c:"ANR" "%%f" && (echo %%f中有異常>>error.txt) || (echo %%f中沒有有異常>>error.txt)
)
說明:必須使用單引號, /n 表示顯示行號 /c:搜尋異常的關鍵字

還有一種可以處理多種型別的檔案
for %%f in (*.txt *.log) do (
...
)

11-cmd: & 和&&區別
echo gao & echo qiang
&:不管命令是否執行成功,一直執行完畢
&&:執行多條命令,當前出錯時就停止

12-cmd: | 命令
管道命令,前一個命令的結果作為下個命令的引數
例如:
netstat -n -p tcp | find "3389"

13-cmd:關於 1>nul 和 2>nul
1>nul :不顯示命令執行的正確提示
例如:echo gao 1>nul //結果不會有任何提示

2>nul :不顯示錯誤的提示
例如: gao 2>nul  //結果不會有錯誤提示


14-cmd: 關於~符號的應用
set s ="gaopinqiang"
echo %s:~3,10% //從第三個字元開始取,取10個字元
可以取變數的指定內容,類似於Python中的分片

擷取最後5個字元
echo %s:~-5%

15-cmd: for 迴圈中使用set失效問題(需要設定 變數延遲)
問題背景:在for迴圈中取時間變數,每次取的時間都一樣,分析後發現是因為set 為生效

例如:
set num=0 && echo %num% // 會提示ECHO處於開啟狀態,因為cmd預編譯機制並未對num賦值,所以echo命令結果就是echo處於開啟

setlocal EnableDelayedExpansion 設定變數延遲 可以解決該問題
例如:
setlocal EnableDelayedExpansion
set num=0 && echo !num!
注意:使用變數延遲的時候需要把%num% 變化為 !num!

這樣for中就可以使用set 命令設定變量了,不會導致不生效問題