Создание сценария 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
Разбор и переименование файлов без расширений со статической переименовкой
( Важное примечание: если два файла будут иметь одно и то же имя YYMMDD при переименовании со статическим именем, это будет проблемой, но пока два файла в одной папке не будут иметь одинаковое имя 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