現在、作業中のDOSバッチスクリプトの問題で立ち往生しており、ファイルの名前を変更するためのサポートが必要です。
私が探している名前の変更スキームは次のとおりです。
FIL120_000112_DDMMYY ==> MYNAME_TLD_EXT_YYMMDD
元のファイル名の最後の部分(DDMMYY
)を取得して、それをYYMMDD
に変換する必要があります。
FIL120_000112_301215 ==> MYNAME_TLD_EXT_151230
FIL120_000112_311215 ==> MYNAME_TLD_EXT_151230
FIL120_000112_040116 ==> MYNAME_TLD_EXT_151230
FIL120_000112_050116 ==> MYNAME_TLD_EXT_151230
ファイル名のその部分にいくつかのコマンドを指定して現在の日付を使用して名前を変更するという現在のニーズには適合しないことに注意してください。
バッチスクリプトを使用して、最後のファイル名のパーツ文字を取得して位置を切り替えることができるかどうかを知りたいので、基本的にYY
とDD
は場所を入れ替えます。
さらに、固定YYMMDD
の前にある他の部分を、切り替え前の静的文字ではなくMYNAME_TLD_EXT_
の静的文字に置き換える必要があるため、最終結果はMYNAME_TLD_EXT_<YYMMDD>
になります。ファイル拡張子はありません。
ファイルの名前を変更するDOSスクリプトの作成
元のファイル名:
FIL120_000112_DDMMYY ==> MYNAME_TLD_EXT_YYMMDD
元のファイル名の最後の部分(DDMMYY)を取得して、YYMMDDに変換する必要があります。
以下は、質問にリストしたとおりに実行するWindowsバッチスクリプトです。このスクリプトの実行内容の説明が必要な場合は、お知らせください。ロジックにコメントを追加して、正確に実行できるかどうかを明確にします。私が何を持っているかに基づいてわからない。
SET SourceDir=
を、名前を変更する必要のあるファイルが配置されている場所のフルパスになるように変更する必要があります。
私の例では、これらのファイルの.txt
ファイル拡張子を使用しましたが、以下のロジックのDIR /B "%SourceDir%\*_*_*.txt"
部分で、他の拡張子に変更できます。問題が発生した場合は、それを支援します。私に知らせて。
また、ファイルに拡張子がまったくない場合は、お知らせください。ファイル拡張子を付けずに、この回答に別の例を追加します。
上記の例と上記の質問の説明で、これが期待どおりに機能することをテストして確認したことに注意してください。
@ECHO ON
SET SourceDir=C:\PathForFilesToRename
FOR /F "TOKENS=*" %%A IN ('"DIR /B "%SourceDir%\*_*_*.txt""') DO (
CALL :RenameLogic "%SourceDir%\%%~NXA" "%%~NA" "%%~XA"
)
GOTO :EOF
:RenameLogic
SET FnameNoExt=%~2
FOR /F "TOKENS=1-3 DELIMS=_" %%R IN ("%FnameNoExt%") DO (SET FnamePart1=%%R_%%S)
SET FnameDtPart=%FnameNoExt:~-6%
SET DD=%FnameDtPart:~0,2%
SET MM=%FnameDtPart:~2,2%
SET YY=%FnameDtPart:~-2%
SET Extension=%~3
REN "%~1" "%FnamePart1%_%YY%%MM%%DD%%Extension%"
GOTO :EOF
@ECHO ON
SET SourceDir=C:\PathForFilesToRename
FOR /F "TOKENS=*" %%A IN ('"DIR /B "%SourceDir%\*_*_*""') DO (
CALL :RenameLogic "%SourceDir%\%%~NXA" "%%~NA"
)
GOTO :EOF
:RenameLogic
SET FnameNoExt=%~2
FOR /F "TOKENS=1-3 DELIMS=_" %%R IN ("%FnameNoExt%") DO (SET FnamePart1=%%R_%%S)
SET FnameDtPart=%FnameNoExt:~-6%
SET DD=%FnameDtPart:~0,2%
SET MM=%FnameDtPart:~2,2%
SET YY=%FnameDtPart:~-2%
REN "%~1" "%FnamePart1%_%YY%%MM%%DD%"
GOTO :EOF
(重要な注意:静的な名前に名前を変更したときに2つのファイルのYYMMDD名が同じになる場合は、次のようになります。問題がありますが、同じフォルダ内の2つのファイルが同じYYMMDD名を持たない限り、これは問題なく機能するはずです。ただし、その静的な名前ですでに名前が変更されているファイルがある場合、次のファイルはその名前で名前を変更しようとします。同じ静的名の場合、それは問題になります。)
変数注:以下のSET StaticFnamePart=
で、静的な名前変更部分の設定に設定したいものに設定できます。ファイルは前進し、名前が変更されたファイルのその部分に配置するために使用されます。
@ECHO ON
SET SourceDir=C:\PathForFilesToRename
SET StaticFnamePart=MYNAME_TLD_EXT
FOR /F "TOKENS=*" %%A IN ('"DIR /B "%SourceDir%\*_*_*""') DO (
CALL :RenameLogic "%SourceDir%\%%~NXA" "%%~NA"
)
GOTO :EOF
:RenameLogic
SET FnameNoExt=%~2
FOR /F "TOKENS=1-3 DELIMS=_" %%R IN ("%FnameNoExt%") DO (SET FnamePart1=%%R_%%S)
SET FnameDtPart=%FnameNoExt:~-6%
SET DD=%FnameDtPart:~0,2%
SET MM=%FnameDtPart:~2,2%
SET YY=%FnameDtPart:~-2%
REN "%~1" "%StaticFnamePart%_%YY%%MM%%DD%"
GOTO :EOF