1

ファイルのフォルダーの名前を(再帰的に)変更するバッチ スクリプトを探しています。

文字列の先頭から最初のアンダースコア (その^(.*?)_) まで一致するように RegEx を既に掘り下げましたが、正規表現を使用してコピーまたは名前変更できるように Windows Batch を納得させることはできません。

4

4 に答える 4

3

_拡張子で 避ける:

@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します。

于 2013-09-19T11:49:43.440 に答える
3

コマンドライン プロンプトから -なし:

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"

編集: 次のケースを発行する新しい純粋なバッチ ソリューション:

  • Path\File_name.ext => name.ext
  • Path\none.ext (何もしない)
  • Path\Some_file_name.ext => file_name.ext
  • Path\name.some_ext (何もしない)
  • Path\Some_file_name.some_ext => name.some_ext

バッチ (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
于 2013-09-19T09:06:40.030 に答える