なぜバッチファイルが使えないのかわかりません。しかし、これはほとんどのファイル名で機能するはずのソリューションです。
重要-最初に、未定義の変数名があることを確認する必要があります。fnameを使用します
set "fname="
次は、実際に名前を変更するコマンドです。fnameがすでに定義されている場合は、正しく機能しません。
for %a in (prefix*.txt) do @(set "fname=%a" & call ren "%fname%" "%fname:*prefix=%")
fname変数は反復ごとに定義され、構文%fname:*prefix=%
は最初に出現する「プレフィックス」を何も置き換えません。トリッキーなことは、コマンドが最初に解析されるときに、Windowsが最初に%fname%を展開しようとすることです。もちろん、まだ定義されていないため、機能しません。コマンドラインでは、変数が見つからない場合、パーセントが保持されます。CALLにより、変数が設定された後に追加の拡張フェーズが発生するため、拡張が機能します。
コマンドを実行する前にfnameが定義されている場合、ループ内で割り当てられている値ではなく、反復ごとに同じファイルの名前を変更しようとします。
別のプレフィックスを使用してコマンドを再度実行する場合は、最初に定義を再度クリアする必要があります。
編集-これは仕事をする「RemovePrefix.bat」という名前のバッチファイルです
::RemovePrefix.bat prefix fileMask
@echo off
setlocal
for %%A in ("%~1%~2") do (
set "fname=%%~A"
call ren "%%fname%%" "%%fname:*%~1=%%"
)
のような名前のファイルがあるとすると"prefixName.txt"
、次のコマンドを実行してスクリプトを使用します。
RemovePrefix "prefix" "*.txt"
バッチファイルは、現在のディレクトリ内のファイルの名前を変更します。バッチファイルがPATH変数にあるディレクトリに存在しない限り、バッチファイルも現在のディレクトリにある必要があります。または、バッチファイルを呼び出すときにバッチファイルへのフルパスを指定することもできます。
拡張のルールは、バッチファイルでは異なります。FOR変数は%Aではなく%% Aとして参照する必要があり、%% fname %%は最初は展開されません。代わりに、二重パーセントが単一パーセントに変換され、CALL後に%fname%が展開されます。fnameがバッチファイルですでに定義されているかどうかは関係ありません。SETLOCALは、fnameの定義をバッチファイルに対して一時的(ローカル)にします。