web-dev-qa-db-ja.com

バッチファイルのパーセント記号を無視する

あるフォルダーから別のフォルダーにファイルを移動するバッチファイルがあります。バッチファイルは別のプロセスによって生成されます。

移動する必要があるいくつかのファイルには、文字列「%20」が含まれています。

move /y "\\myserver\myfolder\file%20name.txt" "\\myserver\otherfolder"

次の名前のファイルを見つけようとするため、これは失敗します。

\\myserver\myfolder\file0name.txt

%を無視する方法はありますか?パーセント記号(%%)を2倍にしたり、/または^(キャレット)でエスケープしたりするなど、これを回避するために生成されたファイルを変更できません。

30
Stagg

この場合、%%を使用する必要があります。通常、^(キャレット)を使用することで問題は解決しますが、%の場合は、倍にする必要があります。

%%1または%%iまたはecho.%%~dp1の場合、%はコマンドまたは変数からの入力を示すため(%;で囲まれている場合)、%variable%

必要なものを実現するには:

move /y "\\myserver\myfolder\file%%20name.txt" "\\myserver\otherfolder"

これが役に立てば幸いです!

49
rud3y

バッチファイルでは、二重パーセント記号(%%)を使用してパーセント記号を「エスケープ」できます。これにより、コマンドライン内で単一のパーセント記号が使用されます。から http://www.robvanderwoude.com/escapechars.php

14
greg

私は部分的な解決策を働いていると思います。名前に「%20」文字列が含まれるファイルのみを転送し、より広範なソリューションを探していない場合は、2番目のバッチファイルで、2番目のパラメーターとして%% 2を使用して最初のバッチファイルを呼び出すことができます。このように、プログラムがテキスト名の%2に到達したときに2番目のパラメーターをフェッチしようとすると、%2がエスケープされた%2に置き換えられ、ファイル名は変更されません。

これがうまくいくことを願っています!

1
dvatreknerd314