Подтвердить что ты не робот

Переименуйте все файлы в каталоге с пакетом Windows script

Как мне написать пакетный или cmd файл, который переименует все файлы в каталог? Я использую Windows.

Измените это:

750_MOT_Forgiving_120x90.jpg
751_MOT_Persecution_1_120x90.jpg
752_MOT_Persecution_2_120x90.jpg
753_MOT_Hatred_120x90.jpg
754_MOT_Suffering_120x90.jpg
755_MOT_Freedom_of_Religion_120x90.jpg
756_MOT_Layla_Testimony_1_120x90.jpg
757_MOT_Layla_Testimony_2_120x90.jpg

Для этого:

750_MOT_Forgiving_67x100.jpg
751_MOT_Persecution_1_67x100.jpg
752_MOT_Persecution_2_67x100.jpg
753_MOT_Hatred_67x100.jpg
754_MOT_Suffering_67x100.jpg
755_MOT_Freedom_of_Religion_67x100.jpg
756_MOT_Layla_Testimony_1_67x100.jpg
757_MOT_Layla_Testimony_2_67x100.jpg
4b9b3361

Ответ 1

Оператор FOR для циклического преобразования имен (тип FOR /? для справки), а также поиск и замену строк (введите SET /? для справки).

@echo off
setlocal enableDelayedExpansion
for %%F in (*120x90.jpg) do (
  set "name=%%F"
  ren "!name!" "!name:120x90=67x100!"
)


UPDATE - 2012-11-07

Я исследовал, как команда RENAME имеет дело с подстановочными знаками: Как команда Windows RENAME интерпретирует подстановочные знаки?

Оказывается, эта конкретная проблема может быть легко решена с помощью команды RENAME без необходимости в пакете script.

ren *_120x90.jpg *_67x100.*

Число символов после _ не имеет значения. Переименование будет работать, если 120x90 стал x или xxxxxxxxxx. Важным аспектом этой проблемы является то, что весь текст между последними _ и . заменяется.

Ответ 2

Как и в Windows 7, вы можете сделать это в одной строке PowerShell.

powershell -C "gci | % {rni $_.Name ($_.Name -replace '120x90', '67x100')}"

Объяснение

powershell -C "..." запускает сеанс PowerShell для запуска указанной цитаты. Когда команда завершается, она возвращается во внешнюю оболочку. -C сокращен для -Command.

gci возвращает все файлы в текущем каталоге. Это псевдоним Get-ChildItem.

| % {...} делает конвейер для обработки каждого файла. % является псевдонимом для Foreach-Object.

$_.Name - это имя текущего файла в конвейере.

($_.Name -replace '120x90', '67x100') используется оператор -replace для создания нового имени файла. Каждое вхождение первой подстроки заменяется второй подстрокой.

rni изменяет имя каждого файла. Первый параметр (называемый -Path) идентифицирует файл. Второй параметр (называемый -NewName) указывает новое имя. rni является псевдонимом Переименовать элемент.

Пример

$ dir
 Volume in drive C has no label.
 Volume Serial Number is A817-E7CA

 Directory of C:\fakedir\test

11/09/2013  16:57    <DIR>          .
11/09/2013  16:57    <DIR>          ..
11/09/2013  16:56                 0 750_MOT_Forgiving_120x90.jpg
11/09/2013  16:57                 0 751_MOT_Persecution_1_120x90.jpg
11/09/2013  16:57                 0 752_MOT_Persecution_2_120x90.jpg
               3 File(s)              0 bytes
               2 Dir(s)  243,816,271,872 bytes free

$ powershell -C "gci | % {rni $_.Name ($_.Name -replace '120x90', '67x100')}"

$ dir
 Volume in drive C has no label.
 Volume Serial Number is A817-E7CA

 Directory of C:\fakedir\test

11/09/2013  16:57    <DIR>          .
11/09/2013  16:57    <DIR>          ..
11/09/2013  16:56                 0 750_MOT_Forgiving_67x100.jpg
11/09/2013  16:57                 0 751_MOT_Persecution_1_67x100.jpg
11/09/2013  16:57                 0 752_MOT_Persecution_2_67x100.jpg
               3 File(s)              0 bytes
               2 Dir(s)  243,816,271,872 bytes free