批處理(bat)學習的一些總結
echo 能找到我,就給你發糖
pause>nul)
::括號里的內容被理解成一個語塊,運行其中的命令時不需從文件讀取,所以就算刪除自身仍可運行。
echo "test&pause|sort
::當一行命令中存在奇數個雙引號時,將會轉義其后所有本行字符
for /f tokens^=2delims^=^" %%a in ("123"test"456") do echo %%a
::通過對特殊字符的轉義,在for中用雙引號當分隔符
for /f tokens^=2delims^=^" %%a in (^"123"456") do echo %%a
set /p=^"""
::當一組字符串中含有奇數個雙引號時經常會出錯,解決方法是轉義其中的一個,保持有效的雙引號成對,可是引號對之內無法用轉義符對其轉義,所以轉義符要放在引號對之外使用
set /a "1/(%random%%%2)"&&set com=||set com=/f "tokens=2"
for %com% %%a in ("123 234 345") do echo %%a
::假如隨機值為偶數,則顯示指定字符串第二段,否則顯示整段。這里用變量來定制命令,會比常規辦法(一條if和一條命令對應)更靈活和省事,但是要注意的是,變量延遲是在解釋語塊之后進行,所以這里的%com%不能使用變量延遲。
set /a \test1=123,test2=234
(@echo off
for /f "tokens=1* delims==" %%a in ('set\') do echo %%b
)|sort
::sort對for命令的輸出進行排序,那個@echo off并非多余,因為通道之前的若是語塊(for、if或者被成對括號包起來的語句),該語塊中的內容將會以cmd /c的形式運行,此時的回顯是打開的,而變量延遲則是默認關閉的。
dir /ad 123\&&md234||rd 345&tree /f|more
::當存在123文件夾時,創建234文件夾,否則刪除345文件夾,無論結果如何,接下來都會逐屏顯示當前目錄樹。重點是管道命令、邏輯連接符的靈活運用
2、句柄的妙用
@echo off 2>nul 3>nul
這個命令不存在...
echo 錯誤回顯呢?
pause
::句柄備份,可用于屏蔽所有正確或錯誤回顯
cd.>1.txt 2>2.txt 3>3.txt 4>4.txt 5>5.txt 6>6.txt 7>7.txt 8>8.txt 9>9.txt
::用一個命令創建9個文件,效率自然提高了
@echo off
(for /r %%a in (*.*) do del /f /s "%%~nxa" 3>>"%%a") 2>nul 4>>%0
pause
::利用寫入句柄會占用文件的特性實現高效刪除重復文件
待續...