Dodaj tekst na końcu nazwy pliku (ale przed rozszerzeniem) za pomocą pliku wsadowego

18

Mam listę plików w formacie po lewej stronie. Chcę dołączyć ciąg do każdej nazwy pliku, ale przed rozszerzeniem, jak pokazano:

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
...

W każdym przypadku dołączony ciąg jest taki sam we wszystkich plikach.

To wydaje się takie proste zadanie, ale mam problem z umieszczeniem tego w pliku wsadowym.

Wypróbowałem renpolecenie i postępowałem zgodnie z niektórymi przykładami na tej stronie , ale nazwy plików wynikowych dołączają ciąg po rozszerzeniu:

File 1.txt version 1.txt
Indyk
źródło
Informacje pod linkiem „ta strona” SS64 pochodzą z tego pytania i odpowiedzi SU (z moim błogosławieństwem): Jak polecenie Windows RENAME interpretuje symbole wieloznaczne? Utrzymuję odpowiedź SU (rzadko), odkrywając nowe funkcje.
dbenham

Odpowiedzi:

6

dla dłuższych nazw plików będziesz musiał dodać więcej ?w bloku o masie?????????

ren *.?* ????????????????????????????????????????????????????????" version 1".*
bummi
źródło
2
Dzięki za odpowiedź tak szybko! Lekko zredagowałem polecenie, aby zachować rozszerzenie pliku i wpływać tylko na pliki txt: ren * .txt ??????????????????????????????? 1.txt ”
TheTurkey
co jeśli chcę dodać coś na początku
Farhana Haque
ile ? znaki są potrzebne?
Kaveesh Kanwal
39

Zamiast polegać na ren nieudokumentowanych dziwactw „s, dlaczego nie to zrobić we właściwy sposób?

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

Jeśli chcesz użyć tego w pliku wsadowym, pamiętaj, aby podwoić każdy znak%.

Karan
źródło
1
Doskonały! to lepsza odpowiedź na każdy dzień. +1
Fr0zenFyr
Czy masz więcej dokumentacji na temat „% ~ a” i innych, abyśmy mogli stworzyć własną wersję?
Jomme
2

Chciałem dodać „_A” do wielu plików i tak to zrobiłem.

Najpierw usunąłem rozszerzenie, dodałem sufiks, a następnie zmieniłem ponownie rozszerzenie na oryginalne. Z pewnością działało to dla mnie i uprościło kod wsadowy, ponieważ nie jestem zbytnim programistą.

@ECHO OFF

REN *.pdf *.
REN *. *_A.
REN *. *.pdf
Avinash Arunagiri
źródło
2

Dla osób, które nie mają doświadczenia w posługiwaniu się (jak ja), istnieje kilka programów, które bardzo łatwo zmieniają nazwy zbiorcze:

  • Narzędzie do zmiany nazwy luzem (brak otwartego źródła)
  • Zmień nazwę! (otwarte źródło)
MagTun
źródło
1

@ bwDraco rozwiązanie było dobre, ale można je było uprościć. Mój zestaw plików to * .jpg i chciałem zmienić ich nazwę na * c.jpg. Potrzebujesz tylko 2 kroków, a nie 3:

ren "{filepath}\*.jpg" *.
ren "{filepath}\*" *c.jpg
Zap Coffey-Brittain
źródło
0

Rekurencyjnie przez podfoldery

#!/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
źródło