(五)usebackq
該命令不是很明朗,這里只能指出使用"usebackq"時(shí)需要注意的問題,就是集合內(nèi)使用雙引號(hào)、單引號(hào)和后引號(hào)的情況。
1、 當(dāng)集合中的文件名file-set含有空格時(shí)使用雙引號(hào)。
語(yǔ)法:
FOR /F "usebackq" %%I IN (“FileNameSet”) DO Command2
用法:
集合中的文件名或路徑含有空格時(shí),如“file”與“Name”之間有空格,此時(shí)需要用雙引號(hào)將兩者括起來(lái),保持文件名或路徑的完整性,并在參數(shù)后打開"usebackq"。
集合中的文件名沒有空格:
@echo off
For /f %%a in (C:\note.txt) do echo %%a
pause>nul
顯示結(jié)果:
能正常讀取文檔note.txt里的內(nèi)容。
集合中的文件名含有空格,無(wú)法讀取文本note.txt里的內(nèi)容:
@echo off
for /f %%a in (C:\Documents and Settings\Administrator\桌面\note.txt) do echo %%a
pause>nul
顯示結(jié)果:
系統(tǒng)找不到文件C:\Documents。。
即使加上雙引號(hào)也只是將其作為字符串顯示:
@echo off
for /f %%a in (“C:\Documents and Settings\Administrator\桌面\note.txt”) do echo %%a
pause>nul
顯示結(jié)果:
C:\Documents
使用"usebackq"但不加雙引號(hào),會(huì)找不到路徑:
@echo off
for /f "usebackq" %%a in (C:\Documents and Settings\Administrator\桌面\note.txt) do echo %%a
pause>nul
顯示結(jié)果:
系統(tǒng)找不到文件 C:\Documents。。
正確的方式:使用"usebackq"并且在集合中用雙引號(hào)將含有空格的文件名包含住。
@echo off
for /f "usebackq" %%a in ("C:\Documents and Settings\Administrator\桌面\note.txt") do echo %%a
pause>nul
顯示結(jié)果:成功顯示文檔note.txt里的內(nèi)容。
講解:
這里所說的是文件名,如“note.txt”,是區(qū)別于后面所說的字符串的。
我的理解,字符串是集合里直接用于屏幕顯示的語(yǔ)句,如“我愛北京天安門”,它不是用于執(zhí)行命令的,也不同于文件名。
文件名是用于間接顯示字符串和打開文件或命令的,如文件名“note.txt”它本身不直接顯示在屏幕上,如果直接顯示就是字符串,如果它的目的是打開文本里的信息那它是文件名。
當(dāng)文件名或路徑中間帶有空格的時(shí)候,如“Documents and Settings”,應(yīng)該使用usebackq和雙引號(hào)。
2、當(dāng)使用usebackq處理文字字符串時(shí)使用單引號(hào)。
格式:
FOR /F "usebackq" %%variable IN ('command') DO command [command-parameters]
注意:
'command'使用的是“單引號(hào)”,區(qū)別于上面(`set`)的“后引號(hào)”
例:
@echo off
for /f "usebackq delims=" %%a in ('Hello "AnsiPeter" Word!') do echo.%%a
pause>nul
顯示結(jié)果:
Hello "AnsiPeter" Word!
講解:
前面提到,字符串是用于直接屏幕顯示的語(yǔ)句,顯然“Hello "AnsiPeter" Word”被直接顯示到屏幕上了。這里只是強(qiáng)調(diào)usebackq也可以顯示字符串,而且使用單引號(hào),不同于不用usebackq時(shí)使用的雙引號(hào)。
不使用usebackq也可以顯示字符串,例:
@echo off
for /f "delims=" %%a in ("Hello "AnsiPeter" Word!") do echo.%%a
pause>nul
顯示結(jié)果同上
注意:不使用usebackq顯示字符串時(shí),字符串中有空格時(shí)必須用英文狀態(tài)下的雙引號(hào)。更多請(qǐng)閱讀下一節(jié)的案例“偉大的中國(guó)人民萬(wàn)歲 萬(wàn)歲 萬(wàn)萬(wàn)歲”。
3、當(dāng)集合內(nèi)是可執(zhí)行的命令時(shí)使用“后引號(hào)”。
語(yǔ)法:
FOR /F "usebackq" %%variable IN (`command`) DO command [command-parameters]
注意:
后引號(hào)在鍵盤上ESC鍵的下面,“~”鍵。英文狀態(tài)下輕按一下。
例:
@echo off
FOR /F "usebackq delims==" %%i IN (`set`) DO @echo %%i
pause
顯示結(jié)果:
枚舉當(dāng)前環(huán)境中的環(huán)境變量名稱。
講解:
`set`由于使用了usebackq和后引號(hào),因此它表示命令執(zhí)行,即括號(hào)內(nèi)的`set`是FOR以外的一個(gè)命令,它在DO后面的echo之前先執(zhí)行了。
命令區(qū)別于文件名和字符串的地方是,命令是批處理中設(shè)定可以作用于其他命令、文件名和字符串執(zhí)行相應(yīng)任務(wù)的字母和標(biāo)點(diǎn)符號(hào)。而文件名和字符串通常是被動(dòng)地接受命令的安排的。因此,命令是早先設(shè)計(jì)好的,我們只是自由地組合它們而已。
未使用usebackq和使用usebackq時(shí)集合內(nèi)的符號(hào)比較:
| 未使用參數(shù)usebackq時(shí): | 使用參數(shù)usebackq時(shí): |
雙引號(hào)”” | 表示字符串,即"string"。 | 當(dāng)文件路徑或名稱中有空格時(shí),用雙引號(hào)括起來(lái)。 |
單引號(hào)’’ | 表示執(zhí)行命令,即'command' 。 | 表示字符串,即'string' 。 |
后引號(hào)`` | (未研究) | 表示命令執(zhí)行,即`command`。 |
練習(xí):
1、請(qǐng)簡(jiǎn)要談?wù)勈褂?/span>usebackq選項(xiàng)時(shí)集合內(nèi)的標(biāo)點(diǎn)符號(hào)該如何表達(dá)。
2、如何修改才能打開騰訊游戲?:
@echo off
FOR /F "usebackq delims==" %%i IN (C:\Program Files\Tencent\QQGame\QQGame.exe) DO @echo %%i
pause>nul
3、請(qǐng)說說集合內(nèi)的“歡迎訪問甲兵時(shí)代的博客”是字符號(hào)、文件名,還是命令?
@echo off
FOR /F "usebackq delims==" %%i IN (‘歡迎訪問甲兵時(shí)代的博客’) DO @echo %%i& start iexplore.exe hi.baidu.com\cjiabing
聯(lián)系客服