ファイルのフォルダーの名前を(再帰的に)変更するバッチ スクリプトを探しています。
文字列の先頭から最初のアンダースコア (その^(.*?)_
) まで一致するように RegEx を既に掘り下げましたが、正規表現を使用してコピーまたは名前変更できるように Windows Batch を納得させることはできません。
ファイルのフォルダーの名前を(再帰的に)変更するバッチ スクリプトを探しています。
文字列の先頭から最初のアンダースコア (その^(.*?)_
) まで一致するように RegEx を既に掘り下げましたが、正規表現を使用してコピーまたは名前変更できるように Windows Batch を納得させることはできません。
_
拡張子で
避ける:
@ECHO OFF
FOR /F "DELIMS=" %%A IN ('DIR /S /B /A-D *_*.*') DO FOR /F "TOKENS=1*DELIMS=_" %%B IN ("%%~NA") DO IF "%%~C" NEQ "" ECHO REN "%%~A" "%%~C%%~XA"
出力を見て、問題がなければ削除ECHO
します。
コマンドライン プロンプトから -正規表現なし:
FOR /R %f IN (*.*) DO FOR /F "DELIMS=_ TOKENS=1,*" %m IN ("%~nxf") DO @IF NOT "%n" == "" REN "%f" "%n"
バッチ ファイルでは、%: を 2 倍にします。
FOR /R %%f IN (*.*) DO FOR /F "DELIMS=_ TOKENS=1,*" %%m IN ("%%~nxf") DO @IF NOT "%%n" == "" REN "%%f" "%%n"
編集: 次のケースを発行する新しい純粋なバッチ ソリューション:
バッチ (ECHO を削除して機能させる):
FOR /R %%f IN (*.*) DO CALL :UseLast "%%~f" "%%~nf"
GOTO :EOF
:UseLast
FOR /F "DELIMS=_ TOKENS=1,*" %%m IN (%2) DO IF "%%n"=="" (
IF NOT "%~2"=="%~n1" ECHO REN %1 "%~2%~x1"
) ELSE CALL :UseLast %1 "%%n"
GOTO :EOF