Попробуйте этот пакетный файл после изменения пути к папке в третьей строке:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "Folder=D:\test\rename"
for /F "eol=| delims=" %%A in ('dir "%Folder%\File-01.part*.rar" /A-D-H /B /ON 2^>nul') do (
for /F "eol=| delims=" %%B in ("%%~nA") do ECHO ren "%Folder%\%%A" "Newfile__01%%~xB%%~xA"
)
endlocal
pause
Примечание: Команда ECHO используется здесь в строке 6, чтобы простопродемонстрировать, что будет командной строкой переименования.Запустите пакетный файл как есть для проверки.Когда все выглядит хорошо, удалите ECHO и снова запустите пакетный файл, чтобы действительно переименовать файлы.
Этот пакетный файл запускает FOR , который запускает команду DIR в отдельном командном процессе, запущенном в фоновом режиме с cmd.exe /C
, чтобы вывести
- только имена в голом формате из-за
/B
- только не скрытых файлов, потому чтоиз
/A-D-H
(атрибут не каталог и не скрыт) * 1024 * - отсортировано по имени из-за
/ON
- совпадения в указанной папке с шаблоном подстановки
File-01.part*.rar
.
Прочтите также статью Microsoft о Использование операторов перенаправления команд для объяснения 2>nul
.Оператор перенаправления >
должен быть экранирован с помощью символа вставки ^
в командной строке FOR , чтобы интерпретироваться как литеральный символ, когда интерпретатор команд Windows обрабатывает эту командную строку перед выполнением команды FOR , котораявыполняет встроенную командную строку dir
в отдельном командном процессе, запущенном в фоновом режиме.2>nul
перенаправляет вывод сообщения об ошибке при отсутствии файла, соответствующего критерию, с дескриптора STDERR на устройство NUL для его подавления.
FOR перехватываетвывод запущенного командного процесса и обрабатывает его построчно с игнорированием пустых строк.
Символ конца строки по умолчанию ;
изменяется с eol=|
от точки с запятой до вертикальной черты. FOR по умолчанию игнорирует строки, начинающиеся с точки с запятой.Имя файла может начинаться с точки с запятой.Но имя файла не может содержать вертикальную черту.
FOR по умолчанию разбивает строку на пробелы / табуляции и назначает только первую часть указанной переменной цикла A
.Режим разделения строк отключен delims=
, который задает пустой список разделителей, в результате чего получается имя файла с расширением файла, но без пути к файлу, как вывод DIR , назначенный переменной цикла.
Внутренний цикл FOR обрабатывает как строку только имя файла без расширения файла.Это строка от первого символа до символа перед последней точкой, то есть File-01.part1
и File-01.part2
, и эта часть присваивается переменной цикла B
.Для внутреннего FOR расширение файла - снова все после последней точки, которая равна .part*
.Реальное расширение файла .rar
файла неизвестно для внутреннего цикла FOR , обрабатывающего только строку имени файла.
Команда REN переименовывает текущий файл, на который есть ссылкаполный путь к новому имени файла с сохранением .part*
со ссылкой %%~B
из внутреннего цикла FOR и расширением исходного файла .rar
из внешнего цикла FOR .
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.
dir /?
echo /?
endlocal /?
for /?
pause /?
ren /?
setlocal /?