У меня есть списки файлов, которые я бы хотел переименовать в пакетном режиме.

Имена исходных файлов: «SlideXX.BMP» (XX - это число от 1 до любого).

Я хотел бы переименовать их всех в "bbrdXX.BMP"

Когда я выполняю ren Slide* bbrd* ren выполняет, но, в отличие от ожидаемого, все становится "bbrd e XX.BMP".

Почему это происходит?

3 ответа3

0

Слайд состоит из 5 букв. BBRD длиной 4 буквы. Если вы можете использовать bbrd_, то e также будет заменен. Если вы готовы сделать два шага:

  • ren "Slide *" "/. "
  • ren lide * bbcd *

Первый рен лишает S или уменьшает длину на единицу. Затем второй ren без ошибок выполняет преобразование в bbrd, поскольку в lide также есть 4 буквы.

0

Я бы пошел с PowerShell на этом, в cmd может быть немного сложнее добиться того, что вы хотите.

$x = gci C:\yourpath | % { gi $_.FullName | rni -newname ($_ -replace "Slide","bbrd") }

В деталях:

  • Сначала он ищет все файлы в каталоге с помощью псевдонима Get-ChildItem gci
  • Затем он будет зацикливаться на каждом файле с псевдонимом foreach-object %
  • Затем он вызывает Item по свойству fullname с псевдонимом get-item gi
  • Затем элемент передается в конвейер и переименовывается псевдонимом rename-item rni
  • Внутри rni части, он заменяет Slide с bbrd для текущего объекта и будет сохранен с новым именем.

чтобы выполнить это рекурсивно, если у вас есть подпапки, в которых также есть файлы, которые нужно переименовать, просто добавьте -r к вашему вызову gci а также добавьте filter только для тех файлов, которые вы хотите:

$x = gci C:\yourpath -r -filter *.bmp | % { [...] }

0

Я не думаю, что в пакетном режиме требуется complex сценарий. Это так же просто, как

@echo off & setlocal EnableExtensions EnableDelayedExpansion
for %%A in (Slide*.bmp) do Set A=%%~nxA&Ren "%%A" "!A:Slide=bbrd!"

Если DelayedExpansion включен по умолчанию, он также является консольным вкладышем:

for %A in (Slide*.bmp) do Set A=%~nxA&Ren "%A" "!A:Slide=bbrd!"

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