Benennen Sie mehrere Dateien in einem Ordner um und fügen Sie ein Präfix hinzu (Windows).

80

Ich möchte Dateien in einem Ordner stapelweise umbenennen und den Namen des Ordners den neuen Namen voranstellen. dh Dateien in C:\house chores\werden alle umbenannt house chores - $old_name.

ofer.sheffer
quelle

Antworten:

141

Option 1: Verwenden von Windows PowerShell

Öffnen Sie das Windows-Menü. Geben Sie "PowerShell" ein und öffnen Sie das Befehlsfenster "Windows PowerShell".

Gehe zum Ordner mit den gewünschten Dateien: zB CD "C: \ Hausarbeiten" Hinweis: Die Adresse muss Anführungszeichen "" enthalten, wenn Leerzeichen vorhanden sind.

Sie können 'dir' verwenden, um alle Dateien im Ordner anzuzeigen. Verwenden von '|' leitet die Ausgabe von 'dir' für den folgenden Befehl weiter.

Anmerkungen: 'dir' ist ein Alias ​​von 'Get-ChildItem'. Siehe: wiki: cmdlets . Man kann weitere Funktionen bereitstellen. Beispiel: 'dir -recurse' gibt alle Dateien, Ordner und Unterordner aus.

Was ist, wenn ich nur eine Reihe von Dateien möchte?

Anstelle von 'dir |' Ich kann nutzen:

dir | where-object -filterscript {($_.Name -ge 'DSC_20') -and ($_.Name -le 'DSC_31')} |

Zum Batch-Umbenennen mit dem Verzeichnisnamen als Präfix:

dir | Rename-Item -NewName {$_.Directory.Name + " - " + $_.Name}

Option 2: Verwenden der Eingabeaufforderung

Drücken Sie im Ordner Umschalt + Rechtsklick: Wählen Sie 'Befehlsfenster hier öffnen'.

for %a in (*.*) do ren "%a" "prefix - %a"

Wenn viele Dateien vorhanden sind, kann es sinnvoll sein, vorher einen Befehl '@echo off' und am Ende einen Befehl 'echo on' hinzuzufügen.

ofer.sheffer
quelle
1
Kleiner Nitpick: Das @In @echo onist nicht erforderlich. Du hast dich gerade umgedreht @echo off.
Unsichtbarer
9
Option 2 (nach dem Hinzufügen eines fehlenden do) funktioniert nicht. Nachdem einige Dateien umbenannt wurden, werden forsie unter dem neuen Namen gefunden und das Präfix immer wieder hinzugefügt, bis die maximale Dateinamenlänge erreicht ist.
Sergey Vlasov
2
Wenn ich Option 2 benutze, bekomme ich ren was unexpected at this time.eine Idee warum?
Nullzeiger
4
@billgates Das Wort dofehlt in seiner Antwort. es sollte seinfor %a in (.) do ren "%a" "prefix - %a"
Christiaan Westerbeek
2
@SergeyVlasov Das passiert in beiden Optionen. Die einzige Möglichkeit, dies zu vermeiden, besteht darin, die Umbenennung über dem Original zu platzieren. Oder verschieben Sie es nach dem Umbenennen in einen anderen Ordner.
David Starkey
39

Das Problem mit den beiden Powershell-Antworten besteht darin, dass das Präfix möglicherweise dupliziert wird, da das Skript möglicherweise sowohl vor als auch nach dem Umbenennen der Datei ausgeführt wird, je nachdem, auf welches Verzeichnis während des Umbenennungsprozesses zurückgegriffen wird. Um dies zu umgehen, verwenden Sie einfach die -ExcludeOption:

Get-ChildItem -Exclude "house chores-*" | rename-item -NewName { "house chores-" + $_.Name }

Dadurch wird verhindert, dass der Prozess eine Datei mehr als einmal umbenennt.

Dave.Gugg
quelle
1
Bitte erwägen Sie, Ihrem Vorschlag ein weniger spezifisches Beispiel hinzuzufügen, das $ _. Directory.Name
ofer.sheffer
17

Freie Software ' Bulk Rename Utility ' funktioniert auch gut (und ist auch für fortgeschrittene Aufgaben leistungsstark). Das Herunterladen und Installieren dauert eine Minute.

Siehe Screenshots und Tutorial auf der Original-Website.

- -

Ich kann keine schrittweisen Screenshots bereitstellen, da die Bilder unter der Creative Commons-Lizenz veröffentlicht werden müssen und ich keine Screenshots der Software besitze.

Haftungsausschluss: Ich bin in keiner Weise mit der genannten Software / Firma verbunden. Ich mochte das Produkt für meine eigene Aufgabe, es erfüllt OPs und ähnliche Anforderungen und empfehle es daher.


quelle
Ich habe es irgendwann selbst benutzt. +1 für das Hinzufügen von etwas zum Thread.
ofer.sheffer
@ ofer.sheffer Danke.
Diese Antwort ist nicht zum Thema! -1
Marco Demaio
1
@MarcoDemaio Danke für das Feedback. Das OP möchte eine Aufgabe erledigen, und die verknüpfte Software macht es einfach. Ich glaube, die Komplexität der Lösung macht sie nicht relevanter.
@GopalAggarwal: Entschuldigung, Sie haben Recht. Ich habe in seiner Frage "Ich möchte Dateien in einem Ordner stapelweise umbenennen" gelesen und dachte, er suche nach einer Windows-Batchdatei. Ich habe meine -1 entfernt.
Marco Demaio
9

Dies funktionierte für mich, zuerst CD in dem Verzeichnis, in das Sie die Dateinamen ändern möchten, und dann den folgenden Befehl ausführen:

Get-ChildItem | rename-item -NewName { "house chores-" + $_.Name }
user3971138
quelle
5
Dies führt zu einer Endlosschleife, bis der Dateiname das Windows-Limit erreicht. Verwenden Sie stattdessen die Antwort von @ Dave.Gugg: stackoverflow.com/a/37279979/2179408
Rob Bell
6

Ich habe mir die Haare ausgerissen, weil bei einigen Elementen das umbenannte Element erneut umbenannt wurde (wiederholt, sofern nicht die maximale Länge des Dateinamens erreicht wurde). Dies geschah sowohl für Get-ChildItem als auch für die Weiterleitung der Ausgabe von dir. Ich vermute, dass die umbenannten Dateien aufgrund einer Änderung der alphabetischen Reihenfolge aufgenommen wurden. Ich habe dieses Problem folgendermaßen gelöst:

Get-ChildItem -Path . -OutVariable dirs
foreach ($i in $dirs) { Rename-Item $i.name ("<MY_PREFIX>"+$i.name) }

Dadurch werden die von Get-ChildItem zurückgegebenen Ergebnisse in der Variablen $ dirs "gesperrt", und Sie können darüber iterieren, ohne befürchten zu müssen, dass sich die Reihenfolge ändert oder andere lustige Geschäfte stattfinden.

Dave.Guggs Tipp für die Verwendung von -Exclude sollte dieses Problem ebenfalls lösen, dies ist jedoch ein anderer Ansatz. Möglicherweise, wenn die umbenannten Dateien bereits das im Präfix verwendete Muster enthalten.

(Haftungsausschluss: Ich bin eine PowerShell n00b.)

Phantom-99w
quelle
2

Basierend auf der Antwort von @ ofer.sheffer wird dieser Befehl massenweise umbenannt und das aktuelle Datum an den Dateinamen angehängt . dh "file.txt" wird für alle Dateien im aktuellen Ordner zu "20180329 - file.txt"

for %a in (*.*) do ren "%a" "%date:~-4,4%%date:~-7,2%%date:~-10,2% - %a"
Karpa
quelle
2

Basierend auf der Antwort von @ ofer.sheffer ist dies die CMD-Variante zum Hinzufügen eines Affix (dies ist nicht die Frage, aber diese Seite ist immer noch das beste Google-Ergebnis, wenn Sie nach einem Affix suchen). Es ist ein bisschen anders wegen der Erweiterung.

for %a in (*.*) do ren "%~a" "%~na-affix%~xa"

Sie können den Teil "-affix" ändern.

roverv
quelle
0

Ich weiß, dass es eine alte Frage ist, aber ich habe viel aus den verschiedenen Antworten gelernt, aber meine eigene Lösung als Funktion gefunden. Dies sollte den übergeordneten Ordner dynamisch als Präfix zu allen Dateien hinzufügen, die einem bestimmten Muster entsprechen, jedoch nur, wenn dieses Präfix noch nicht vorhanden ist.

function Add-DirectoryPrefix($pattern) {
    # To debug, replace the Rename-Item with Select-Object
    Get-ChildItem -Path .\* -Filter $pattern -Recurse | 
        Where-Object {$_.Name -notlike ($_.Directory.Name + '*')} | 
        Rename-Item -NewName {$_.Directory.Name + '-' + $_.Name}
        # Select-Object -Property Directory,Name,@{Name = 'NewName'; Expression= {$_.Directory.Name + '-' + $_.Name}}
}

https://gist.github.com/kmpm/4f94e46e569ae0a4e688581231fa9e00

kmpm
quelle