最近、これに似た行を.cmdファイルに含めました。
for /f %%f in ('dir /b .\directory\*.sql') DO sqlcmd -b -o ".\directory\output\%%f.txt" -i ".\directory\%%f"
もともと私は%fしか使用していませんでしたが、コマンドラインで実行すると正常に動作しますが、ファイルを実行すると正常に動作しませんでした。%% fに切り替えると、ファイルで機能しました。違いは何だろうと思っています。
最近、これに似た行を.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
DOSでは、コマンドラインで環境変数を使用することはできませんでした。バッチファイルでのみ、%
記号を区切り文字として使用していました。%
バッチファイル、たとえばecho
ステートメントで文字通りの記号が必要な場合は、それを2倍にする必要がありました。
これは、コマンドラインで環境変数を許可するWindows NTに引き継がれましたが、下位互換性のため%
に、.cmdファイルの符号を2倍にする必要があります。