我最近包括在.cmd文件類似這樣的一行:cmd文件中%和%%有什麼區別?
for /f %%f in ('dir /b .\directory\*.sql') DO sqlcmd -b -o ".\directory\output\%%f.txt" -i ".\directory\%%f"
我原本只是用來%F,當通過文件運行時,在命令行上來看,它做工精細,但不。當我切換到%% f時,它在文件中工作。只是想知道有什麼不同。
我最近包括在.cmd文件類似這樣的一行:cmd文件中%和%%有什麼區別?
for /f %%f in ('dir /b .\directory\*.sql') DO sqlcmd -b -o ".\directory\output\%%f.txt" -i ".\directory\%%f"
我原本只是用來%F,當通過文件運行時,在命令行上來看,它做工精細,但不。當我切換到%% f時,它在文件中工作。只是想知道有什麼不同。
(更詳細解釋可以在this Microsoft kb找到)
三個事項:
%1
,%2
,...兩個百分號之間的任何字符都被解釋爲變量:
echo %myvar%
%%f
爲什麼是那?
例如,如果我們執行你的(簡化)命令行
FOR /f %f in ('dir /b .') DO somecommand %f
在批處理文件
,規則2會試圖解釋
%f in ('dir /b .') DO somecommand %
爲一個變量。爲了防止這種情況,你必須申請規則3,逃離%
與第二%
:
FOR /f %%f in ('dir /b .') DO somecommand %%f
在DOS中,您不能在命令行上使用環境變量,只能在批處理文件中使用%
符號作爲分隔符。如果您想在批處理文件中輸入文字%
,例如在echo
聲明中,您需要將其加倍。
這繼承了Windows NT,允許在命令行上使用環境變量,但爲了向後兼容,您仍然需要將.cmd文件中的%
符號加倍。
有爲什麼我可以在僅使用一個百分號FOR循環跑不掉的解釋,直接從命令提示符執行,而不是從批處理文件執行?我知道DOS遺產,但我們可以**現在使用命令行中的變量。 –
另外,確保變量是單個字符。 – jiggunjer