dosバッチファイルの通常のエスケープ文字は、キャレット^
です。しかし、%の場合、変数の区切り文字である%
は、エスケープは%を倍にします。%%cd%%
。ループfor
の中にparameter extensionsを使用すると物が変化します。 %%~dpnx0
の代わりに%~dpnx0
を発行すると、ループ外にあるので、D:\Scripts\foo.py
を出力して置換を実行します。FORループでパラメータを使用するときのパーセント(%)をエスケープする方法は?
ここでは、バッチファイルのデモです:
@echo off
echo This is a pipe: ^|
echo Use this var for the current directory: %%cd%%
echo Use this to echo full path of running batch file: %%~dpnx0
for %%a in (foo.py baz.py) do (
echo @python %%~dpnxa ^> %%~na.bat
)
はこれらは私が得る結果である:
This is a pipe: |
Use this var for the current directory: %cd%
Use this to echo full path of running batch file: %~dpnx0
@python d:\Scripts\foo.py > foo.bat
@python d:\Scripts\baz.py > baz.bat
しかし、これは私が欲しいものです:
This is a pipe: |
Use this var for the current directory: %cd%
Use this to echo full path of running batch file: %~dpnx0
@python %~dpnxa > foo.bat
@python %~dpnxa > baz.bat
私が倍増試してみました3倍、4倍にすることで、全体的にキャスティングが散りばめられ、すべて成功することはありません。
whoa、それは奇妙ですが、+1で動作します。ありがとう! (他の解決方法があるかどうかを確認するためにAcceptを遅らせる) –
@mattwilkie - 私は問題がどのように潜在的であるかを示す別の例を追加しました! – dbenham