пакетный поиск и замена имен папок

я использую пакетный файл (с именем folder.bat), чтобы добавить строку _v0_1 для каждого имени папки в моей папке (у меня около 100 папок в моей папке)

Я вызываю свой пакет (folder.bat) из другого пакетного файла, который содержит эти строки (например):

папка вызова arbiter_logic

папка вызова arbiter_logic_old

проблема в том, что пакетное переименование папок также происходит, когда имя папки длиннее имени переменной (% 1), и я хочу этого избежать.

Я хочу, чтобы действие переименования выполнялось только в том случае, если существует точное совпадение между переменной %1 и именем папки. Вот мой код:

setlocal enabledelayedexpansion
pushd G:\my folder
for /f "tokens=* delims= " %%a in ('dir /b/ad') do (
set x=%%a
set y=!x:%1=%1_v0_1!
ren !x! !y!
)
::==
cd..

в настоящее время нежелательный результат:

арбитр_логика_v0_1

арбитр_логика_v0

setlocal enabledelayedexpansion
pushd G:\my folder
for /f "tokens=* delims= " %%a in ('dir /b/ad') do (
set x=%%a
set y=!x:%1=%1_v0_1!
ren !x! !y!
)
::==
cd..
old_v0_1

и желаемый результат заключается в том, что пакет изменит имя папки, как показано ниже:

арбитр_логика_v0_1

arbiter_logic_old_v0_1

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

vb script также будет подходящим решением, если пакетный файл не подойдет.

Заранее спасибо. шей.


person terminetorx    schedule 04.12.2012    source источник


Ответы (1)


Нет необходимости в вашем "folder.bat". Вы можете просто переименовать каталоги в вашем основном скрипте.

ren "g:\my folder\arbiter_logic" "arbiter_logic_v0_1"
ren "g:\my folder\arbiter_logic_old" "arbiter_logic_old_v0_1"

Вы можете сэкономить время на наборе текста, используя цикл FOR, особенно если вам нужно выполнить много переименований.

for %%F in (
  "arbiter_logic"
  "arbiter_logic_old"
) do ren "g:\my folder\%%~F" "%%~F_v0_1"

Если вы действительно хотите вызвать folder.bat в своем основном скрипте, то ваш «folder.bat» может быть таким же простым, как.

@ren "g:\my folder\%~1" "%~1_v0_1"
person dbenham    schedule 04.12.2012
comment
Работает как шарм. Кстати, зачем @? - person terminetorx; 05.12.2012
comment
@terminetorx - @ предотвращает вывод командной строки в стандартный вывод. Вероятно, в этом нет необходимости, так как он находится в сценарии, который вызывается из другого, при условии, что ваш основной сценарий выдал ECHO OFF. - person dbenham; 05.12.2012