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
.
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
.
Antworten:
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.
do
) funktioniert nicht. Nachdem einige Dateien umbenannt wurden, werden for
sie unter dem neuen Namen gefunden und das Präfix immer wieder hinzugefügt, bis die maximale Dateinamenlänge erreicht ist.
ren was unexpected at this time.
eine Idee warum?
do
fehlt in seiner Antwort. es sollte seinfor %a in (.) do ren "%a" "prefix - %a"
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 -Exclude
Option:
Get-ChildItem -Exclude "house chores-*" | rename-item -NewName { "house chores-" + $_.Name }
Dadurch wird verhindert, dass der Prozess eine Datei mehr als einmal umbenennt.
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.
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 }
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.)
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"
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.
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
@
In@echo on
ist nicht erforderlich. Du hast dich gerade umgedreht@echo off
.