本文使用先注釋說明經驗后用代碼說明的方式一段段記錄 bat腳本注釋符號有::或者rem等,置於句首注釋本行 bat腳本分cmd命令和腳本文件,同樣的命令在符號寫法上會有稍微的區別,如重定向符 >和 >>等 ::echo off 表示在此語句后所有運行的命令都不顯示命令行本身,echo on 表示在此語句后所有運行的命令都顯示命令行本身,@加在每個命令行的最前面,表示運行時不顯示這一行的命令行 @echo off ::bat腳本一行只能有一個命令,甚至結束空格還必須放下一行,但使用了變量延遲擴展命令之后可以一行多個命令,但不建議使用。 setlocal enabledelayedexpansion ::后續命令使用的是:UTF-8編碼 chcp 65001 ::echo 表示輸出后面的字符串 echo 中文 ::%cd%代表當前路徑 echo 當前路徑為: %cd% :: 輸出文件目錄的樹形結構到文件 tree F: > tree_list.txt :: rem注釋中不能使用重定向符和管道符 rem 顯示文本內容 type tree_list.txt rem 搜索當前目錄下所有的文本文件 rem for循環中可以給變量賦值但不能使用,只能調用常量或%%i,就是說剛賦值的變量變化不會體現。if句中也是!!! rem 剛賦值的變量變化不會體現。if句中也是! rem 直接分析字符串要加引號!! rem for循環do的括號的內容一定不要放到和for同一行, rem 因為bat腳本會強識別到空格,如果最后一句是賦值語句跟了空格和括號會多賦一個空格到變量中去,且很難發現錯誤!!!!! rem for循環中/f參數是比較常用的,用於按序取出文件中行交給后續處理 for %%i in (*.txt) do echo "%%i" ::echo=輸出空白行 echo= rem /p 是讓你輸入 rem /a 命令行開關指定等號右邊的字符串為被評估為數字表達式。 set sumRows=0 set /a sumRows+=1 rem "tokens=x,y" 判斷x列,輸出y列. rem eol=# #開頭的行為注釋行 rem tokens=1,3* 將每行第1段,第3段和剩余字段分別賦予變量%%i,%%j,%%k (其中變量字母包括%%i必須按順序且連續),*代表后面切分開的依次賦給順延%%變量 rem delims=,- (減號后有一空格)以逗號減號和空格為分隔符,空格必須放在最后 rem if 語句后,括號前,必須加空格,否則語法錯誤!!! rem bat腳本對於空格是強識別的,不會當成縮進!!!所以,該有空格的地方必須有且不要多!最好是語法結構寫規范! rem skip=10 跳過前10行(貌似不包括空行) for /f "eol=# skip=10 tokens=1,2,3 delims=, " %%i in (userdata.txt) do ( if %%i==%numberOfRows% ( set name=%%j set buildFingerprint=%%k ) ) rem for循環/r參數之后還可帶盤符及路徑,如顯示d:盤中所有文件名為file1和file2的列表 for /r d:\ %%h in (file1,file2) do if exist %%h echo %%h rem 利用for循環計算文本行數 set sumRows=0 for /f "eol=# tokens=1,2,3,4 delims=, " %%i in (userdata.txt) do ( set /a sumRows+=1 ) echo 有效數據共 %sumRows% 行 rem bat腳本之間的變量是默認共享的,但是這是在被讀取的變量所在bat腳本剛剛在本腳本中被call調用過,系統才會記錄下此變量值!!!! rem bat腳本中調用bat,參數就按順序跟在后面,參數用%1,%2.....去接收 call check_if_200_OK.bat paifile_uploadresult.txt rem 比較運算符 rem EQU - 等於 rem NEQ - 不等於 rem LSS - 小於 rem LEQ - 小於或等於 rem GTR - 大於 rem GEQ - 大於或等於 if "%status%" NEQ "200_OK" ( echo paifile: %paiFilePath% upload is faild: ) rem bat腳本可以像匯編一樣用goto進行跳轉 goto xxx :xxx rem 不等號可以用NEQ也可以用if not if not "abc" == "def" do ( echo not equal ) rem 使用%變量名:被替換字符=目的字符%方式進行字符串內字符替換 和 刪除!!!如下為刪除session_id_tmp變量中的"符號;和把變量var1里面的%%a替換為空 set session_id=%session_id_tmp:"=% set var1=!str:%%a=! rem 字符串截取如:從第1個開始取不包含后面3個的所有字符 set str=123456789 echo %str:~0,-3% rem 字符串合並,直接連着寫就行 set aa=偉大的中國! set bb=我為你自豪! echo %aa%%bb% rem 搜索當前目錄下所有的文本文件 @echo off for %%i in (*.txt) do echo "%%i" rem findstr查找字符串命令,如查找文件vfind_data.txt中包含Hello字符串的行,區分大小寫。更多字符串處理的詳見https://blog.csdn.net/chuangxin/article/details/104329792 findstr "Hello" vfind_data.txt ::pause命令可以讓腳本程序暫停, 會打印輸出 “請按任意鍵繼續...”字樣。PAUSE>NUL 則表示暫停且不提示“按下任意鍵繼續”。但輸出重定向到文件需要程序結束,pause會讓文件流不關閉,導致目標文件沒有生成 pause rem 在bat腳本中如果想在'()'的語句塊中輸出內容,要注意不要使用')',由於bat腳本本身的缺陷,會把括號語句塊中的任何后半括弧當作語法符號,這樣會報錯')'后面的字符串was unexpected at this time.如: if "%sumRows%" EQU "%numOfSaveSucceed%" ( echo All data(%sumRows% rows) saved successfully, publish now... ) rem bat腳本和shell腳本中都可以使用curl語句來進行網絡訪問,且語法結構相同,但其中變量調用方式會因腳本不同而不同。具體可參考另一篇curl相關文章
(如果你覺得有用的話可以關注下博主~歡迎評論區討論~請注明轉載鏈接~)