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


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

Інформація на вашому посиланні "Ця сторінка" на SS64 надходить із цього запитання "SU" (з мого благословення): Як команда Windows RENAME інтерпретує підстановку? Я підтримую відповідь SU (нечасто), коли відкриваю нові функції.
dbenham

Відповіді:


6

для більш довгих імен файлів вам доведеться додати ще трохи ?в блок масою?????????

ren *.?* ????????????????????????????????????????????????????????" version 1".*

2
Дякуємо, що відповіли так швидко! Я трохи відредагував команду, щоб зберегти розширення файлу і вплинути лише на файли txt: ren * .txt ????????????????????????? "" Версія 1.txt "
TheTurkey

що робити, якщо я хочу щось додати на початку
Farhana Haque

скільки ? символи потрібні?
Kaveesh Kanwal

39

Замість того , щоб покладатися на РЕН недокументованих примхи «и, чому б не зробити це правильний шлях?

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

Якщо ви хочете використовувати це в пакетному файлі, просто не забудьте подвоїти кожен знак%.


1
Відмінно! це краща відповідь у будь-який день. +1
Fr0zenFyr

Чи є у вас більше документації про "% ~ a" та інших, щоб ми могли зробити власну версію?
Jomme

2

Я хотів додати "_A" до кількох файлів, і ось так я це зробив.

Спочатку я видалив розширення, додав суфікс, а потім змінив розширення назад на початковий. Це, звичайно, працювало для мене, а пакетний код простий, оскільки я не дуже програміст.

@ECHO OFF

REN *.pdf *.
REN *. *_A.
REN *. *.pdf

2

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

  • Утиліта масового перейменування (без відкритого коду)
  • Перейменуйте-це! (відкрите джерело)

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.