2017-03-16 2 views
1

バッチスクリプトを使用してファイル名の文字列を置き換えようとしていますが、ファイルに感嘆符またはアンパサンドが含まれていると問題になります。ファイル名の文字列を感嘆符とアンパサンドでバッチを使用して置換する

Setlocal enabledelayedexpansion 
Set "Pattern=[String_A]" 
Set "Replace=[B_String]" 
For %%a in (*.*) Do (
    Set "File=%%~a" 
    Ren "%%a" "!File:%Pattern%=%Replace%!" 
) 

上記のコードは、ファイル名がなくても動作しますが、残りの部分は助けが必要です。

これは複数回実行する必要がある(より大きなスクリプトの一部です)。

何か助けていただければ幸いです。

答えて

1

遅延拡張を無効にすると、set "file=%%~aの拡張が安全になるという問題があります。
解決方法は、遅延拡張モードを切り替えることです。

Setlocal DisableDelayedExpansion 
Set "Pattern=[String_A]" 
Set "Replace=[B_String]" 
For %%a in (*.*) Do (
    Set "File=%%~a" 
    Setlocal EnableDelayedExpansion 
    Ren "!file!" "!File:%Pattern%=%Replace%!" 
    endlocal 
) 
+0

私はこれを試したと思っていましたが、交換する必要があります。ありがとうございました! –

関連する問題