Вы можете добавить текст в конец любого имени файла (до первой точки, которая обычно является началом расширения), используя последовательность символов ?
это по крайней мере столько, сколько оригинальное имя.
ren "C:\Users\user123\Desktop\mp3\*.mp3" ??????????????????????text.*
?
жадно совпадает и сохраняет любой символ, кроме .
и может ничего не совпадать, если в нем нет символов. Ваш текст затем добавляется, а затем .*
Соответствует и сохраняет точку и оставшуюся часть имени.
Вы можете изменить исходную маску файла так, как считаете нужным, чтобы соответствовать любым файлам, которые вы хотите. Исходная маска полностью независима от маски переименования.
См. Как команда Windows RENAME интерпретирует подстановочные знаки? для дополнительной информации.
Если некоторые из ваших файлов содержат более одного .
в имени, тогда вы не можете использовать одну простую команду REN. Одним из вариантов является использование пакетного сценария:
@echo off
pushd "C:\Users\user123\Desktop\mp3\*.mp3"
for /f "delims= eol=:" %%F in ('dir /b /a-d *.mp3') do ren "%%F" "%%~nFtext%%~xF"
popd
Обратите внимание, что важно использовать FOR /F, а не простой FOR. FOR /F собирает весь результат команды DIR перед началом итерации, тогда как простой FOR начинает выполнять итерацию после заполнения внутреннего буфера, что повышает риск переименования одного и того же файла несколько раз.
Я использую EOL=:
для защиты от удаленной возможности, с которой начинается имя файла ;
, EOL по умолчанию является ;
, который игнорирует строки, начинающиеся с ;
, Имена файлов не могут содержать :
поэтому для параметра EOL это безопасный символ.
Один небольшой недостаток FOR /F с DIR /B - это то, что он не сохраняет информацию о пути, поэтому я использовал PUSHD в начале. Без PUSHD вы могли бы включить информацию о пути в команду DIR, но тогда вам также нужно будет включить путь в маску источника REN. Следующая строка работает в командной строке (без пакетного скрипта):
for /f "delims= eol=:" %F in ('dir /b /a-d "C:\Users\user123\Desktop\mp3\*.mp3"') do @ren "C:\Users\user123\Desktop\mp3\%F" "%~nFtext%~xF"
Альтернативой является использование команды FINDSTR для вывода списка файлов, который удобно сохраняет информацию о пути:
for /f "delims=" %F in ('findstr /m "^" "C:\Users\user123\Desktop\mp3\*.mp3"') do @ren "%F" "%~nFtext%~xF"
Поскольку каждый указанный файл начинается с буквы диска, можно использовать EOL=;
по умолчанию ; ,
Последний вариант - вы можете использовать мою утилиту переименования регулярных выражений JREN.BAT. Это чистый скрипт (гибридный JScript/batch), который работает на любом компьютере с Windows начиная с XP.
jren "(.*)(\.mp3)$" "$1text$2" /i /p "C:\Users\user123\Desktop\mp3"
Поскольку JREN является пакетным скриптом, вам нужно будет использовать CALL JREN, если вы используете команду в другом пакетном скрипте.