it-swarm.com.de

Mehrere Dateien in einem Ordner umbenennen, Präfix hinzufügen (Windows)

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

52
ofer.sheffer

Option 1: Verwenden von Windows PowerShell

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

Gehe zu Ordner mit den gewünschten Dateien: z. cd "C:\house chores" Hinweis: Adresse muss Anführungszeichen "" enthalten, wenn Leerzeichen vorhanden sind.

Sie können 'dir' verwenden, um alle Dateien im Ordner anzuzeigen. Verwenden von '|' wird die Ausgabe von 'dir' für den folgenden Befehl in eine Pipeline schreiben.

Hinweise: 'dir' ist ein Alias ​​von 'Get-ChildItem'. Siehe: wiki: cmdlets . Weitere Funktionen können bereitgestellt werden. z.B. 'dir -recurse' gibt alle Dateien, Ordner und Unterordner aus.

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

Anstelle von 'dir |' Ich kann nutzen:

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

Für das Umbenennen mit dem Verzeichnisnamen als Präfix:

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

Option 2: Eingabeaufforderung verwenden

Im Ordner drücken Sie Umschalt + Rechtsklick: Wählen Sie 'Befehlsfenster hier öffnen' aus.

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

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

107
ofer.sheffer

Das Problem bei 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, welches Verzeichnis während des Umbenennungsvorgangs neu sortiert 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 mehrmals umbenennt.

23
Dave.Gugg

Freie Software ' Bulk Rename Utility ' funktioniert ebenfalls gut (und ist auch für fortgeschrittene Aufgaben geeignet). Download und die Installation dauert eine Minute.

Siehe Screenshots und Tutorial auf der Originalwebsite.

-

Ich kann keine Schritt-für-Schritt-Screenshots bereitstellen, da die Bilder unter Creative Commons License veröffentlicht werden müssen und ich keine Eigentümer der Screenshots der Software bin.

Disclaimer: 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 empfiehlt es daher.

12
user216084

Dies hat für mich funktioniert, 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 }
11
user3971138

Ich habe mir die Haare herausgerissen, weil bei einigen Elementen das umbenannte Element erneut umbenannt wurde (wiederholt, wenn nicht die maximale Dateinamenlänge erreicht wurde). Dies geschah sowohl für Get-ChildItem als auch für das Piping der Ausgabe von dir. Ich denke, dass die umbenannten Dateien aufgrund einer geänderten alphabetischen Reihenfolge aufgegriffen wurden. Ich habe dieses Problem auf folgende Weise 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 in der Variablen $ dirs zurückgegebenen Ergebnisse gesperrt, und Sie können darüber iterieren, ohne befürchten zu müssen, dass sich die Bestellung ändert oder andere lustige Vorgänge passieren.

Der Tipp von Dave.Gugg zur Verwendung von -Exclude sollte dieses Problem ebenfalls lösen. Dies ist jedoch ein anderer Ansatz. Vielleicht, wenn die umbenannten Dateien bereits das im Präfix verwendete Muster enthalten.

(Haftungsausschluss: Ich bin eine PowerShell N00b.)

1
phantom-99w

Basierend auf der Antwort von @ ofer.sheffer wird dieser Befehl in Massen umbenannt und das aktuelle Datum an den Dateinamen anhängen. 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"
1
karpa

Ich weiß, dass es eine alte Frage ist, aber ich habe eine Menge 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 das Präfix nicht bereits 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

0
kmpm

Basierend auf der @ ofer.sheffer-Antwort ist dies die CMD-Variante zum Hinzufügen eines Affix (dies ist nicht die Frage, aber diese Seite ist immer noch das erste Google-Ergebnis, wenn Sie nach 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.

0
roverv