Пакетное переименование имен файлов, сохранить ext?

279
narrator dru

(Win10) В пакетном файле, как мне рекурсивно переименовать имена файлов в папке? Не расширение .

например

Файлы для переименования: heavy.doc, bright.jpg, fast.docx, quiet.png и т. Д.

Переименуйте в: A1. *, A2. *, A3. *, A4. * И т. Д. (Где. * Сохраняет исходный ext)

Становится: A1.doc, A2.jpg, A3.docx, A4.png и т. Д.

Спасибо!

1
См. [Этот] (https://stackoverflow.com/questions/17271586/rename-multiple-files-in-cmd) полезный вопрос и [этот] (https://www.howtogeek.com/111859/how-to- batch-rename-files-in-windows-4-way-to-rename-множественные файлы /) с практическими рекомендациями. Вам нужно сделать это как часть сценария? Почему бы не использовать автономную программу переименования? simlev 7 лет назад 0
Первый добавляет строку набора к имени файла. Интересно, но не то, что я был после. Второй хорошо выполняет свою работу, хотя и в скобках. Что касается необходимости делать это в пакетном скрипте, было бы неплохо иметь решение в один клик, которое я могу использовать регулярно, и мне нравится изучать новые способы использования таких скриптов. Ура! narrator dru 7 лет назад 0

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

1
simlev

После быстрого просмотра справочной страницы для for, я мог бы придумать это:

@echo off & setlocal EnableDelayedExpansion  set a=1 for /f "tokens=1,2 delims=." %%G in ('dir /b /s /A:-D') do ( ren "%%G.%%H" "A!a!.%%H"  set /a a+=1 ) 

Обновление: было бы лучше передать исходную папку в качестве параметра, чтобы сам скрипт мог быть размещен где угодно и не рисковал переименовываться сам.

@echo off & setlocal EnableDelayedExpansion  set a=1 for /f "tokens=1,2 delims=." %%G in ('dir /b /s /A:-D %1') do ( ren "%%G.%%H" "A!a!.%%H"  set /a a+=1 ) 

Объяснение:

@echo off это позволяет избежать записи каждой команды на консоль.

setlocal EnableDelayedExpansionэто необходимо для aфактического увеличения переменной.

set a=1мы создаем переменную счетчика с именем aи устанавливаем ее начальное значение 1.

for /f цикл против списка имен файлов.

tokens=1,2 delims=.имя файла будет разделено при .обнаружении. Мы заинтересованы в первых двух токенах, полученных в результате этой операции. Примечание: ожидается, что имена файлов не содержат точку, кроме как между базовым именем и расширением.

%%Gэто имя первого токена (подразумевается, что второй будет %%H).

in ('dir /b /s /A:-D %1')Зацикливайте результаты dirкоманды, в которой перечислены файлы в каталоге, переданном в качестве параметра, %1со следующими параметрами: /bочистить вывод, /sвключить результаты из подкаталогов, /A:-Dтолько файлы списка, а не имена папок.

ren "%%G.%%H" "A!a!.%%H"переименуйте имя файла ( %%G.%%Hвосстанавливает исходное имя файла) в константу Aплюс aтекущее значение переменной плюс оригинальное расширение %%H.

set /a a+=1 увеличивает переменную счетчика.

Отличный сценарий, симлев .. Большое спасибо .. поиграюсь с этим! narrator dru 7 лет назад 0

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