BAT-файл для переименования нескольких папок - PullRequest
6 голосов
/ 14 февраля 2012

Я пытаюсь написать пакетный скрипт для переименования нескольких папок.Я хотел бы сделать что-то вроде ниже: Переименуйте все папки в папке «Рабочая область», добавив мое имя в конце имени папки

Например, переименуйте:

Workspace/RiskFolder
Workspace/PNLFolder

в:

Workspace/RiskFolder_myname
Workspace/PNLFolder_myname

Возможно ли это?

Ответы [ 5 ]

15 голосов
/ 14 февраля 2012

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

for /D %%f in (C:\path\to\Workspace\*) do rename "%%f" "%%~nxf_myname"

Я проверил это на Windows 7, но оно должно работать, по крайней мере, так же, как с Windows XP.

Что это значит: для каждого каталога в пути (в скобках) присвойте имя каталога переменной %%f, затем переименуйте каталог %%f в имя в нужном формате (с вашим именем). прилагается). %%f содержит полный путь, который подходит для первого аргумента команды rename, но для второго аргумента нам нужно только имя файла + расширение, поэтому модификатор ~ nx добавляется перед именем нашей переменной.

Кстати, при использовании этого цикла for в командной строке (а не части пакетного файла) вы хотите использовать только один% вместо %% в качестве имени переменной. Например. for %f in... вместо вышеуказанного.

См. Следующие ссылки от Microsoft для получения более подробной информации:

3 голосов
/ 14 февраля 2012

Вы можете использовать следующую команду в вашем пакетном файле: -

for /F "usebackq tokens=*" %%a in (`dir /ad /b %1`) do ren %1\%%a %%a%2

Это команда DOS 'for', которая выполняет итерацию по заданному набору элементов и выполняет для каждого элемента в набореданное действие.Для данного требования нам нужно сделать следующее: -

1) Принять имя папки, содержащей подпапки для переименования (в вашем примере это Рабочая область).

2) Примите строку, которую нужно добавить в конец (в вашем примере это ваше имя).

3) Перечислите имена подпапок в папке.

4) Переименуйте подобавление строки к исходному имени.

Давайте посмотрим, как эта команда выполняет это.Используемый здесь формат команды 'for': -

for /F ["options"] %variable IN (`command`) do command [command-parameters]

Команда здесь предполагает, что требуемое имя родительского каталога и добавляемая строка передаются в качестве параметров командной строки.Они представлены% 1 и% 2 (первый и второй параметры).

Чтобы дать нам возможность выполнить команду dos для оценки, нам нужно использовать параметр / F.Строка параметра: -

"usebackq tokens=*"
  • usebackq указывает, что заданная в обратном порядке строка является командой для оценки. (Обратите внимание, что команда dir заключена в обратные кавычки (`))
  • tokens= * означает, что каждая строка рассматривается как один токен и передается команде

Чтобы вывести подкаталоги в родительском каталоге, мы используем команду: -

dir /ad /b %1
  • / ad отображает только каталоги (игнорирует файлы)
  • / b отображает их в формате без вывода, то есть возвращаются только имена, а дата, время и другая информация - нет.
  • % 1переменная командной строки, ссылающаяся на родительский каталог.
  • %% a - это переменная, которая получает имя подкаталога на каждой итерации.Символ двойного процента необходим, поскольку мы используем его в пакетном файле, в противном случае требуется только один (например,% a)

Наконец, мы указываем действие, которое необходимо выполнить: -

ren %1\%%a %%a%2
  • % 1 \ %% a создает абсолютный путь к подкаталогу
  • %% a% 2 добавляет второй параметр командной строки к исходному имени

ПодробнееДля получения информации о команде введите в командной строке следующую команду: -

for /?

Другой пример использования см. Loopy loop: Способ DOS

3 голосов
/ 14 февраля 2012

Нет необходимости в пакетном файле.Это будет работать из командной строки

for /d %D in ("Workspace\*") do ren "%D" "%~nxD_myName"

Если вы используете командный файл, %D должно стать %%D

2 голосов
/ 28 мая 2013

Если нет необходимости выполнять переименование папки / файла с помощью пакетного файла, вы также можете использовать утилиту массового переименования для Windows. Проверьте это: http://www.bulkrenameutility.co.uk/Download.php

0 голосов
/ 24 февраля 2014
For /D %%f in (*) do rename "%%f"  "%%fWhatEverNameYouLike"
pause

Пауза, чтобы увидеть это!Сделайте cmd этого и поместите его в папку, в которую вы хотите переименовать все его подпапки!Они будут переименовывать каждое имя папки, а также WhatEverNameYouLike

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...