просто измените суффикс с помощью .bat - PullRequest
0 голосов
/ 05 марта 2012

Мне просто нужно переименовать последовательность файлов, скажем от ######. Avi до ### two.avi, используя .bat Поэтому мне нужно удалить 3 последних символа перед расширением и заменить их на «два». Я нашел решение для изменения префикса,

@echo off
for %%i in (*.avi) do (set fname=%%i) & call :rename
goto :eof
:rename
ren %fname% two%fname:~3%
goto :eof

но ничего на суффиксе. Заранее спасибо.

UPD. Спасибо мужчина! Это решение. С помощью я могу поднять вас с +1 повторением, но я не могу (не требуется 15 повторений) Кроме того, чтобы не писать так много, это можно сделать более коротким текстом:

@echo off
for %%i in (*.avi) do (set fname=%%i) & call :rename
:renameFile
ren %fname% %fname:~0,3%two.avi

1 Ответ

2 голосов
/ 05 марта 2012

Вы были близки, вам просто нужен модификатор расширения ~ n, чтобы получить базовое имя без расширения.Он работает как с переменными FOR, так и с параметрами CALL.Я бы изменил имя вашей подпрограммы: rename, чтобы ее нельзя было спутать с командой RENAME.

@echo off
for %%i in (*.avi) do (set fname=%%~ni) & call :renameFile
goto :eof
:renameFile
ren "%fname%.avi" "%fname:~0,-3%two.avi"
goto :eof

Если вы активируете отложенное расширение, подпрограмма вам не нужна.Я переключаю отложенное расширение внутри цикла, чтобы имя файла с ! не было повреждено при назначении имени.

@echo off
for %%i in (*.avi) do (
  set fname=%%~ni
  setlocal enableDelayedExpansion
  ren "!fname!.avi" "!fname:~0,-3!two.avi"
  endlocal
)
...