Почему ren оставляет "e" в простой задаче переименования

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

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

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

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

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

3 ответа

Решение

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

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

В деталях:

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

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

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

Я не думаю, что в партии есть 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!"

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

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

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

Другие вопросы по тегам