2017-02-24 5 views
0

ファイル名に "キャレット"記号が含まれているファイルが何千もありますが、変数に割り当てようとすると奇妙な結果が得られます。たとえば、ファイル名が"01^Driver's Seat.flac,"の場合、コマンドecho %1は余分なキャレットを使用して​​を返し、処理は停止します。どのように正しい出力を得るには?ファイル名から変数への特殊文字の読み込み

+5

呼び出し文で行13で、あなたのコードにバグがあります! – jeb

+5

[CALLを使用しているときのバグの挙動](https://ss64.com/nt/call.html):_ CALLコマンドに、引用符付き文字列内にキャレット文字が含まれていると、 "test^ing" '、キャレットは2倍になります。_(' "test ^^ ing" ') – JosefZ

+3

@JosefZ' CALL'は引用符を使わなくても常にキャレットを2倍にしますが、通常は見えません非常に特殊なテストケースで) – jeb

答えて

1

キャレットの倍数は、CALLコマンドの問題です(How the batch parser works参照)。

これは、値で変数の代わりに参照によって変数を持つ関数を呼び出すことによって回避できます。

コール:FUNC "%のvariableNameには%" - 値で
コール:variableNameにFUNC - 参照による

call :func filename 

... 

:func 
setlocal EnableDelayedExpansion 
set "filename=!%1!" 
echo filename: !filename! 
関連する問題