Создание сценария 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
Дополнительные ресурсы и чтение