3

В настоящее время я застрял в проблеме с пакетным сценарием 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> и не имеет расширения файла.

1 ответ1

6

Создание сценария 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

Дополнительные ресурсы и чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .