Пакетное: как вы массово переименовываете файлы (приближаясь)? - PullRequest
2 голосов
/ 23 января 2012

Я видел, как люди делают это в Perl, но мне интересно, есть ли способ сделать это через пакет?Он встроен в Windows, поэтому я думаю, что было бы полезно узнать, как это сделать с помощью пакетного скрипта.Не требует установки чего-либо на компьютер.

Пример входного имени: myFile_55 Пример выходного шаблона: измените myFile на picture и уменьшите число на 13. Пример вывода: picture_42.

Как бы вы подошли к этому?Я знаю пакетную команду для переименования:

ren myFile_55 picture_42.

Итак, если у меня есть файл с именем renamer.bat, я могу добавить следующее:

for /r %%x in (%1) do ren "%%x" %2.

Затем я могу набрать эту команду:

renamer.bat myfile* picture*.

Хотя я не знаю, как уменьшить числа.

1 Ответ

0 голосов
/ 23 января 2012

Вероятно, вы можете поместить оригинальное имя файла в цикл for, извлечь имя и числа, выполнить вычисления по числам, а затем снова подключить его с новым именем и номером.Пока формат имени файла name_number, вы можете использовать это:

REM Allow for numbers to be iterated within the for-loop i.e. the i - z
SETLOCAL ENABLEDELAYEDEXPANSION
SET i=0
SET z=13
SET newName=picture
SET workDir=C:\Path\To\Files

REM Given that filenames are in the format of 'Name_number', we're going to extract 'number
REM and set it to the i variables, then subtract it by 13, then rename the original file
REM to what the newName_x which if the filename was oldName_23 it would now be newName_10
FOR /r %%X in (%1) do (
  FOR /F "tokens=1-2 delims=_" %%A IN ("%%X") DO (
    SET i=%%B
    SET /A x=!i! - %z%

    REM ~dpX refers to the drive and path of the file
    REN "%%~dpX\%%A_%%B" "%newName%_!x!"
  )
)

РЕДАКТИРОВАТЬ: Редактировал команду REN, чтобы включить диск и путь к исходному файлу.Изменено с нижнего регистра x на верхний регистр X, чтобы не путать %%~dpX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...