web-dev-qa-db-ja.com

ファイルの名前を変更するDOSバッチスクリプトの作成

現在、作業中の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

ファイル名のその部分にいくつかのコマンドを指定して現在の日付を使用して名前を変更するという現在のニーズには適合しないことに注意してください。

バッチスクリプトを使用して、最後のファイル名のパーツ文字を取得して位置を切り替えることができるかどうかを知りたいので、基本的にYYDDは場所を入れ替えます。

さらに、固定YYMMDDの前にある他の部分を、切り替え前の静的文字ではなくMYNAME_TLD_EXT_の静的文字に置き換える必要があるため、最終結果はMYNAME_TLD_EXT_<YYMMDD>になります。ファイル拡張子はありません。

3
khiloc

ファイルの名前を変更するDOSスクリプトの作成

元のファイル名:

FIL120_000112_DDMMYY ==> MYNAME_TLD_EXT_YYMMDD

元のファイル名の最後の部分(DDMMYY)を取得して、YYMMDDに変換する必要があります。

以下は、質問にリストしたとおりに実行するWindowsバッチスクリプトです。このスクリプトの実行内容の説明が必要な場合は、お知らせください。ロジックにコメントを追加して、正確に実行できるかどうかを明確にします。私が何を持っているかに基づいてわからない。

SET SourceDir=を、名前を変更する必要のあるファイルが配置されている場所のフルパスになるように変更する必要があります。

私の例では、これらのファイルの.txtファイル拡張子を使用しましたが、以下のロジックのDIR /B "%SourceDir%\*_*_*.txt"部分で、他の拡張子に変更できます。問題が発生した場合は、それを支援します。私に知らせて。

また、ファイルに拡張子がまったくない場合は、お知らせください。ファイル拡張子を付けずに、この回答に別の例を追加します。

上記の例と上記の質問の説明で、これが期待どおりに機能することをテストして確認したことに注意してください。


Windowsバッチスクリプトの例

ファイル名拡張子の付いたファイルの解析と名前の変更

@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

その他のリソースと資料

6
Pimp Juice IT