最近、これに似た行を.cmdファイルに含めました。
for /f %%f in ('dir /b .\directory\*.sql') DO sqlcmd -b -o ".\directory\output\%%f.txt" -i ".\directory\%%f"
もともと私は%fしか使用していませんでしたが、コマンドラインで実行すると正常に機能しましたが、ファイルを実行すると機能しませんでした。%% fに切り替えると、ファイルで機能しました。違いは何だろうと思っています。
回答:
(詳細については、アーカイブされたMicrosoft KBの記事を参照してください。)
知っておくべき3つのこと:
%1
、%2
...文字を間に挟んだ2パーセント記号は、変数として解釈されます。
echo %myvar%
%%f
なんで?
たとえば、(簡略化された)コマンドラインを実行すると
FOR /f %f in ('dir /b .') DO somecommand %f
バッチファイルでは、ルール2は解釈を試みます
%f in ('dir /b .') DO somecommand %
変数として。これを防ぐには、ルール3を適用%
し、2番目のルールでエスケープする必要があります%
。
FOR /f %%f in ('dir /b .') DO somecommand %%f