Пакетное переименование файла с сохранением номера детали RAR - PullRequest
0 голосов
/ 23 мая 2018

Как видно из названия, я хочу пакетно переименовать файлы, но оставить часть файла rar.

Пример:

  • File-01.part1.rar
  • File-01.part2.rar

Вывод:

  • Newfile__01.part1.rar
  • Newfile__01.part2.rar

Ниже приведена переименованная часть кода.

SETLOCAL EnableDelayedExpansion

REM Set your Year, Month, Day variable values here.
REM They will be used for file renaming.

CD "D:\test\rename"

FOR /F "usebackq tokens=* delims=" %%A IN (`DIR "*.rar" /B /A:-D`) DO (
    REM Extract the last 2 chars of the file name.
    SET FileName=%%~nA
    SET First4=!FileName:~0,5!
    SET Last2=!FileName:~-2!

    REM Rename the file, inserting the new data.
    RENAME "%%A" "!First4!__!Last2!%%~xA"
)
ENDLOCAL

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Вот пример сценария, основанный на моем предположении о том, что вы хотели сделать:

@Echo Off
SetLocal EnableDelayedExpansion

Set "sd=D:\test\rename"
Set "xf=.rar"

If Not Exist "%sd%\*%xf%" Exit /B
CD /D "%sd%" 2>Nul || Exit /B

Set "ds="
For /F "Tokens=1-3 Delims=/ " %%A In ('RoboCopy/NJH /L "\|" Null'
) Do If Not Defined ds Set "ds=%%A%%B%%C"

For %%A In ("*%xf%") Do (Set "fn=%%~nA"
    For %%B In ("!fn!") Do (Set "fx=%%~xB"
        If /I Not "!fx:.part=!"=="%%~xB" Set "fn=%%~nB")
    Ren "%%A" "!fn:~,4!_%ds%_!fn:~-2!!fx!%xf%$")
Ren "*%xf%$" "*%xf%"

Я выделил переменную года, месяца, дня, %ds% между двумя подчеркиваниями, что означает:

  • File-01.part1.rar будет переименован в File_20180523_01.part1.rar
  • Testing18.part2.rar будет переименован в Test_20180523_18.part2.rar
  • Archive02.rar будет переименован в Arch_20180523_02.rar.
0 голосов
/ 23 мая 2018

Попробуйте этот пакетный файл после изменения пути к папке в третьей строке:

@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 /?
...