Пакетное переименование файлов DOS

У меня есть большой набор файлов с именами, структурированными string_int_int_int_string.extension, и я хотел бы переименовать их в пакетном режиме с заполнением левым нулем до 7 цифр во втором интервале.

Пример: переименуйте stringA_1_2stringA_1_0000002_3_stringB.jpgstringB.jpg в stringA_1_0000002_3_stringB.jpg.

Я видел несколько полезных сообщений здесь, здесь и здесь, но не совсем этого.

Вот что у меня есть на данный момент (не работает, конечно):

dir /b *.* >temp.txt

for /f "tokens=%%1,%%2,%%3,%%4,%%5 delims=_" %x in (temp.txt) do (
    setlocal enabledelayedexpansion
    set PAD=000000%%k
    set PAD=!PAD:~7!
    ren "%%i_%%j_%%k_%%l_%%m" %%i_%%j_%PAD%_%%l_%%m
)

Я специально хочу сделать это с помощью командного файла, а не какого-либо другого языка или инструмента. (Я знаю о различных инструментах переименования.)

Любая помощь приветствуется!


person user1205577    schedule 06.11.2012    source источник
comment
Вы хотите сделать это SomeName_1_2_3_SomeName для SomeName_1_0000002_3_SomeName?   -  person Tanmay    schedule 06.11.2012
comment
Точно. я обновлю вопрос   -  person user1205577    schedule 06.11.2012


Ответы (2)


Я использую FINDSTR для фильтрации имен файлов, которые не соответствуют указанному шаблону. Всего необходимо 4 токена — первые 3, за которыми следует остальная часть имени файла.

@echo off
setlocal disableDelayedExpansion
for /f "tokens=1,2,3* delims=_" %%A in (
  'dir /b /a-d * ^|findstr /r "^[^_]*_[0-9]*_[0-9]*_[0-9]*_[^_]"'
) do (
  set "mid=%%C"
  set "pad=0000000%%C"
  set "start=%%A_%%B"
  set "end=%%D"
  setlocal enableDelayedExpansion
  echo ren "!start!_!mid!_!end!" "!start!_!pad:~-7!_!end!"
  endlocal
)
person dbenham    schedule 07.11.2012

person    schedule
comment
@ user1205577: Вставьте ECHO перед REN и сообщите, что отображается. Также убедитесь, что имена файлов имеют указанный формат. - person Aacini; 07.11.2012
comment
@ user1205577: НЕ УДАЛЯЙТЕ старые комментарии, потому что ответы на них выглядят несколько бессвязно... Пожалуйста, сообщите, правильно ли работает мое решение (ваш удаленный комментарий указывает на то, что это не так, и вы никогда не очищаете этот момент). :( - person Aacini; 08.11.2012