Я не могу понять, как именно мы используем reges в пакетных файлах.

Мне просто нужно заменить vm_[^_]*_ на файлы ТОЛЬКО .txt в подпапках, скажем, C:/ProjectFiles/

Имена файлов выглядят так:
vm_dsr_ads_fire.txt
vm_m1911_idle.txt

Мне нужно, чтобы они заканчивались именами файлов:
ads_fire.txt
idle.txt

Как мне это сделать?

1 ответ1

0

Читая help for и упражнения?

Давайте серьезно, вам не нужно регулярное выражение здесь (если так, то вам будет лучше использовать vbscript или Powershell)

Этот пакет генерирует DoRename.cmd вы можете пересмотреть и выполнить позже. Измените Basefld чтобы соответствовать вашей среде.

@Echo off
Set Basefld=Q:\Test
Pushd %Basefld% ||(Echo can't cd to %Basefld%&Pause&Exit /B 1)
> DoRename.cmd (
For /F "Delims=" %%A in ('Dir /B/S "vm_*.txt"'
  ) DO For /F "tokens=1,2* Delims=_" %%B in ('Echo:%%~nxA'
    ) Do Echo Ren "%%~A" "%%D"
)
start "" Notepad.exe DoRename.cmd

Эта вторая партия не имеет ненужных ремней безопасности и немедленно переименует файлы в текущем каталоге и подкаталогах.

@Echo off
For /F "Delims=" %%A in ('Dir /B/S "vm_*.txt"'
  ) DO For /F "tokens=1,2* Delims=_" %%B in ('Echo:%%~nxA'
    ) Do Ren "%%~A" "%%D"

Первый для обхода дерева для файлов, второй анализирует имя файла и расширение. delims = _ разбивает имя на токены. token1 aka %% B - это ´vm´ token2 %% C - текст между первыми двумя подчеркиваниями и token3 * %% D - остальная часть имени, включая .ext.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .