Batch Dateinamen umbenennen, ext beibehalten?

416
narrator dru

(Win10) In einer Batch - Datei, wie benenne ich Dateien rekursiv Namen in einem Ordner? Nicht die Erweiterung .

z.B

Umzubenennende Dateien: heavy.doc, bright.jpg, fast.docx, quiet.png usw

Umbenennen in: A1. *, A2. *, A3. *, A4. * Usw. (wobei.. * Das ursprüngliche Ext. Behält)

Wird zu: A1.doc, A2.jpg, A3.docx, A4.png usw

Vielen Dank!

1
Siehe [this] (https://stackoverflow.com/questions/17271586/rename-multiple-files-in-cmd) nützliche Frage und [this] (https://www.howtogeek.com/111859/how-to- batch-rename-files-in-windows-4-weisen-mehrere-files-umbenennen /) How-to. Müssen Sie dies als Teil eines Skripts tun? Warum nicht ein eigenständiges Umbenennungsprogramm verwenden? simlev vor 7 Jahren 0
Die erste hängt eine festgelegte Zeichenfolge an einen Dateinamen an. Interessant, aber nicht was ich wollte. Der zweite macht die Arbeit gut, wenn auch mit Klammern. Wenn Sie es in einem Batch-Skript tun müssen, wäre es schön, eine Ein-Klick-Lösung zu haben, die ich regelmäßig verwenden kann, und ich liebe es, neue Möglichkeiten für die Verwendung solcher Skripts zu lernen. Prost! narrator dru vor 7 Jahren 0

1 Antwort auf die Frage

1
simlev

Nach einem kurzen Blick auf die Referenzseite von for könnte ich Folgendes finden:

@echo off & setlocal EnableDelayedExpansion  set a=1 for /f "tokens=1,2 delims=." %%G in ('dir /b /s /A:-D') do ( ren "%%G.%%H" "A!a!.%%H"  set /a a+=1 ) 

Update: Es ist besser, den ursprünglichen Ordner als Parameter zu übergeben, damit das Skript selbst an einer beliebigen Stelle platziert werden kann und keine Gefahr besteht, dass es selbst umbenannt wird.

@echo off & setlocal EnableDelayedExpansion  set a=1 for /f "tokens=1,2 delims=." %%G in ('dir /b /s /A:-D %1') do ( ren "%%G.%%H" "A!a!.%%H"  set /a a+=1 ) 

Erläuterung:

@echo off Dadurch wird vermieden, dass jeder Befehl in die Konsole geschrieben wird.

setlocal EnableDelayedExpansionDies ist erforderlich, damit die aVariable tatsächlich zunimmt.

set a=1Wir erstellen eine aufgerufene Zählervariable aund setzen ihren Anfangswert auf 1.

for /f Schleife gegen eine Liste von Dateinamen.

tokens=1,2 delims=.Der Dateiname wird geteilt, wenn a gefunden .wird. Wir sind an den ersten beiden Token interessiert, die sich aus dieser Operation ergeben. Hinweis: es wird erwartet, dass die Dateinamen nicht nicht enthalten einen Punkt, außer zwischen dem Basisnamen und der Erweiterung.

%%Gist der Name des ersten Tokens (impliziert, dass das zweite Token sein wird %%H).

in ('dir /b /s /A:-D %1')Schleife über die Ergebnisse des dirBefehls, der die Dateien in dem Verzeichnis auflistet, die als Parameter %1mit den folgenden Optionen übergeben werden: /bsaubere Ausgabe, /sErgebnisse von Unterverzeichnissen einschließen, /A:-Dnur Listendateien und keine Ordnernamen.

ren "%%G.%%H" "A!a!.%%H"Benennen Sie den Dateinamen ( %%G.%%Hrekonstruiert den ursprünglichen Dateinamen) in eine Konstante Aplus den aaktuellen Wert der Variablen plus die ursprüngliche Erweiterung um %%H.

set /a a+=1 erhöht die Zählervariable.

Tolles Skript, simlev .. Danke vielmals .. werde damit spielen! narrator dru vor 7 Jahren 0