Создание пакетного сценария DOS для переименования файлов

1323
khiloc

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

3
Хотите скрипт для MS-DOS 6 или Windows cmd.exe? Если это Windows, то должен ли это быть пакетный скрипт? (Windows 7+ имеет более мощные языки сценариев, такие как PowerShell.) grawity 8 лет назад 0
Здравствуйте, спасибо за ответ. Мне нужно, чтобы запустить на Windows Server 2008 R2. на самом деле у меня уже есть скрипт (не PowerShell, а JSut Basic Dos скрипт), выполняющий работу, но часть переименования опирается на фрагмент кода, чтобы найти предыдущую дату и добавить ее в файл en. это приводило меня к проблеме каждый понедельник, когда файл нужно переименовывать не в предыдущий день (воскресенье), а в последний рабочий день. Еще одна проблема возникает, когда у нас праздники .. khiloc 8 лет назад 0
Вот почему я хочу изменить способ переименования скрипта, а не пытаться получить последний рабочий день (который, я думаю, будет сложнее для скрипта .... сложным для меня ... не для язвительных гуру ....) поэтому моя идея заключается в том, что, поскольку входящий исходный файл уже содержит нужную дату в имени файла, мне просто нужно изменить исходную дату записи в соответствии с моими потребностями, выполнив, таким образом: FIL120_000112_DDMMYY ==> MYNAME_TLD_EXT_YYMMDD khiloc 8 лет назад 0

1 ответ на вопрос

5
Pimp Juice IT

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

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

Похожие вопросы