Сценарий переименования перезаписывает часть имени файла, а не добавляет его

Это кажется мне очень простым, и я уверен, что так будет и с большинством из вас, но я не могу понять, почему это происходит.

Все, что я пытаюсь сделать, это использовать эту маленькую строчку в скрипте, чтобы найти файлы.png в определенной папке (представленной переменной%folder2%) и PRE-pend их с помощью "DONE-". Он делает это, НО, он перезаписывает первые пять символов имени файла тем, с чем я хочу, чтобы он был добавлен (DONE-). Вот строка кода:

для %%a in (PNG) сделать (переименовать "%folder2%*.%%a" "DONE-*.%%a")

Я надеюсь, что некоторые из вас могут пролить свет на это.

1 ответ

Решение

Невозможно делать то, что вы хотите, используя только RENAME команда - в ней просто нет механизма добавления значения к существующему имени при использовании подстановочных знаков. Любые символы в вашем целевом имени заменят символы в имени источника, вплоть до первого .,

Я не могу винить вас за то, что вы не понимаете, потому что документация Windows ужасна для этой команды. Я никогда не видел ничего написанного где-нибудь, что описывает правила. Вот почему я исследовал и написал Как команда Windows RENAME интерпретирует подстановочные знаки?,

Пакетное решение для добавления текста к существующему имени заключается в использовании цикла FOR для переименования каждого файла в отдельности. Что-то вроде следующего должно работать для вас.

for %%F in ("%folder2%*.PNG") do rename "%%F" "DONE-%%~F"

Другой вариант - использовать стороннюю утилиту, более мощную, чем нативная. RENAME команда. Если вас устраивают регулярные выражения, то одна из опций - моя утилита переименования JREN.BAT. Это чистый сценарий (гибридный JScript/batch), который изначально запускается на любой машине с Windows начиная с XP - сторонний exe-файл не требуется. Если у вас есть копия, справка доступна из командной строки через jren /?, или же jren /?? за постраничную помощь.

С JREN.BAT решение так же просто, как jren "^" "DONE-" /p "%folder2%" /fm *.png, Если вы поместите команду в пакетный скрипт, вам нужно использовать call jren так что он вернется к вашему сценарию.

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