Пакетное переименование файлов DOS
У меня есть большой набор файлов со структурированными именами string_int_int_int_string.extension
и хотел бы переименовать их в пакетном режиме с добавлением нуля до 7 цифр во втором int.
Пример: переименовать stringA_1_2_3_stringB.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
)
Я специально хочу сделать это с помощью командного файла, а не какого-либо другого языка или инструмента. (Я знаю о различных инструментах переименования там.)
Любая помощь приветствуется!
2 ответа
Решение
setlocal EnableDelayedExpansion
dir /b *.* >temp.txt
for /F "tokens=1-5 delims=_" %%a in (temp.txt) do (
set PAD=000000%%c
set PAD=!PAD:~-7!
ren "%%a_%%b_%%c_%%d_%%e" "%%a_%%b_!PAD!_%%d_%%e"
)
Я использую 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
)