Добавить текст в конец имени файла (но перед расширением), используя командный файл

18

У меня есть список файлов в формате слева. Я хочу добавить строку к каждому имени файла, но перед расширением, как показано:

File 1.txt  ->  File 1 version 1.txt
File 2.txt  ->  File 2 version 1.txt
File 3.txt  ->  File 3 version 1.txt
File 4.txt  ->  File 4 version 1.txt
...

В каждом случае добавленная строка одинакова для всех файлов.

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

Я попробовал renкоманду и следовал некоторым примерам на этой странице , но в результате имена файлов добавляются в строку после расширения:

File 1.txt version 1.txt
TheTurkey
источник
Информация в вашей ссылке SS64 «эта страница» взята из этого SU Q & A (с моего благословения): Как команда Windows RENAME интерпретирует подстановочные знаки? Я поддерживаю ответ SU (нечасто), поскольку я обнаруживаю новые функции.
dbenham

Ответы:

6

для более длинных имен файлов вам придется добавить еще несколько ?в блоке с массой?????????

ren *.?* ????????????????????????????????????????????????????????" version 1".*
bummi
источник
2
Спасибо за быстрый ответ! Я слегка отредактировал команду, чтобы сохранить расширение файла и повлиять только на текстовые файлы: ren * .txt ?????????????????????????? "Версия 1.txt "
TheTurkey
Что делать, если я хочу добавить что-то в начале
Фархана Хак
Как много ? персонажи нужны?
Kaveesh Kanwal
39

Вместо того , чтобы полагаться на РЕН недокументированных причуды «ы, почему бы не сделать это правильный путь?

for %a in (*.txt) do ren "%~a" "%~na version 1%~xa"

Если вы хотите использовать это в пакетном файле, просто не забудьте удвоить каждый знак%.

Каран
источник
1
Отлично! это лучший ответ в любой день. +1
Fr0zenFyr
У вас есть больше документации о "% ~ a" и других, чтобы мы могли сделать нашу собственную версию?
Джомм
2

Я хотел добавить «_A» к нескольким файлам, и вот как я это сделал.

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

@ECHO OFF

REN *.pdf *.
REN *. *_A.
REN *. *.pdf
Авинаш Арунагири
источник
2

Для людей, которые не имеют опыта работы с командами (например, я), есть пара программ, которые делают массовое переименование очень простым:

  • Утилита массового переименования (без открытого исходного кода)
  • Переименовать-It! (открытый источник)
MagTun
источник
1

Решение @ bwDraco было хорошим, но его можно было бы упростить. Все мои файлы были * .jpg, и я хотел переименовать их все * c.jpg. Для этого вам нужно всего 2 шага, а не 3:

ren "{filepath}\*.jpg" *.
ren "{filepath}\*" *c.jpg
Зап Коффи-Бриттен
источник
0

Рекурсивно через подпапки

#!/bin/bash
# Warning: globstar excludes hidden directories.
# Turn on recursive globbing (in this script) or exit if the option is not supported:
shopt -s globstar || exit
for f in **
do
if [ -f "$f" ]; then
   extn=${f##*.} # save the extension of the file
   #mv "$f" "${f%.*}"_suffix.${extn};
   mv "$f" "${f%.*} version 1".${extn};
fi
done
Ferroao
источник