Почему 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 буквы.