@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
FOR /f "delims=" %%x IN (
'dir /b /a-d "%sourcedir%\*.txt" '
) DO (
SET "oldname=%%x"
SET "newname="
SET "drivname="
REM detect a line with 4 ">"
REM Process only the first found in a file
FOR /f "usebackqtokens=1-5delims=>" %%a IN (
"%%x") DO IF NOT DEFINED newname IF "%%e" neq "" (
REM process date into %%i, %%j, %%k
FOR /f "tokens=1-3delims=/ " %%i IN ("%%b") DO (
REM build drivname
CALL :procname %%d
REM build new filename and rename file
CALL :build %%k %%i %%j %%e
)
IF NOT DEFINED newname ECHO %%x NOT renamed
)
)
GOTO :EOF
:procname
IF "%2"=="" GOTO :EOF
SET "drivname=%Drivname% %1"
shift
GOTO procname
:build
IF NOT DEFINED drivname GOTO :EOF
SET "newname=%1%2%3-%drivname:~1%-%4"
IF /i "%oldname%" neq "%newname%" (
ECHO(REN "%sourcedir%\%oldname%" "%newname%"
)
GOTO :eof
sourcedir
の設定を状況に合わせて変更する必要があります。
テスト目的で必要なRENコマンドは、単にECHO
です。 コマンドが正しいことを確認したら、をECHO(REN
からREN
に変更して、実際にファイルの名前を変更します。
比較的簡単:
プロセス%%x
に各ファイル名。そのファイル名で、4 >
を含む行を探します。その行が見つかると(%%e
は空ではありません)、日付は%%b
になるので、%%i,j,k
に解析し、+ TRUCK文字列を%%d
に処理します。最後に、%%k
の年、%%i
の月、%%j
の日、%%e
のトラックナンバー、%drivname%のdrivernameを一緒に要素を構築します。
:build
ルーチンは、drivname
が存在することを保証し、指定されたパラメータとdrivname
から新しいファイル名を作成します。新しい名前と古い名前が同じ場合(大文字と小文字を区別しない)、名前の変更によってエラーが発生します(ファイルはすでに以前に処理されています)ので、名前を変更しないでください。 :build
ルーチンにnewname
が設定されているので、名前が変更されるとそれは繰り返されません。
最後に、newname
が設定されていない場合、ファイルには必要な形式の行がないため、その事実を報告してください。ここで
私は2行しか見ません。 – Squashman
データを再フォーマットしました - これが正しいことを確認してください。フォーマットするには、投稿する情報を選択して '{} 'を押してください。 – Magoo
4行目に興味があり、'> '記号、そう?与えられたサンプルテキストファイルから派生した名前を教えてください。あなたが名前を変更したいものを明確にしてください - ファイルまたはフォルダ(あなたは両方を挙げました)。そして、それを解決するあなた自身の試みを共有してください! – aschipfl