Wie kann ich Dateien massenweise umbenennen?

126

Ich habe eine Reihe von Dateien, die mit dem Muster benannt sind, 99 - DescriptiveName.txtund ich möchte die Nummer von der Vorderseite entfernen, so dass ich nur habe DescriptiveName.txt.

Wie kann ich das machen? Kann ich das von der Kommandozeile aus machen oder gibt es ein Dienstprogramm, das das kann?

CodeSlave
quelle

Antworten:

94

Ich weiß, dass Sie in Ihrem Titel "in dos" sagen, aber ich habe den Eindruck, dass Sie nur nach einem Weg suchen, dies zu tun, und Sie fragen sich, ob dies der beste Weg ist.

Das absolut beste Tool, das ich dafür gefunden habe, ist Bulk Rename Utility .

Dienstprogramm zur Massenumbenennung

Es ist kein Befehlszeilenprogramm, aber es gibt eine Befehlszeilenversion, wenn Sie es wirklich so verwenden möchten.

Ich habe die GUI-Version oft benutzt und sie ist sehr leistungsfähig, sehr schnell und extrem einfach zu bedienen.

Oh, und es ist KOSTENLOS für den persönlichen Gebrauch.

Jim McKeeth
quelle
Leider ist das Tool nicht für den kommerziellen Gebrauch kostenlos :(
AntonK
Deshalb habe ich gesagt, dass es für den persönlichen Gebrauch kostenlos ist.
Jim McKeeth
2
Dies ist ein superschnelles Werkzeug. Es löste mein Problem mit 6.000 Dateien in Sekunden und verwendete mehrere Such- und Ersetzungslogiken. Ist wie mit Notepad ++, aber Bearbeiten von Tausenden von Dateien. Eine großartige Lösung, danke!
Erdnüsse
59

Ein kleines PowerShell-Skript:

$args | Rename-Item -NewName { $_.Name.ToLower() -replace '\d+ - ' }

In Kombination mit komplexeren regulären Ausdrücken könnte dies etwa so aussehen:

ls | Rename-Item -NewName {$_ -replace '(\d+) - (.*).mp3', '$2 - $1.mp3' }

Das verwandelt Dinge wie '01 - Beginning.mp3 'in' Beginning - 01.mp3 '.

Verwenden Sie den -WhatIfParameter on Rename-Item, um Umbenennungen zu überprüfen, bevor Sie sie ausgeben.

sysrqb
quelle
1
@sysrqb, bitte recherchieren Sie ein bisschen mehr.
Joey
Benötigt replace nicht zwei Zeichenfolgenausdrücke? Der zweite hat zwei, der erste nicht. ... -replace '\d+ - ',''. Ich glaube auch, dass der erste besser ist, indem man einfach den Anfang mit Regex abstreift. Obwohl ich der Meinung bin, dass Sie den Anker ^ am Anfang des Ausdrucks einfügen sollten, stimmt er nur mit Namen überein, die mit Zahlen beginnen.
Xalorous
1
@Xalorous: Naja, du könntest es einfach ausprobieren. -replacekann nur ein Argument auf der rechten Seite haben. In diesem Fall ist das zweite implizit die leere Zeichenfolge.
Joey
Das hat mich gerettet. Das Massenumbenennungsprogramm stürzt jetzt ab und ich habe so viele andere Lösungen ausprobiert. Dies ist viel besser für Leute, die sich mit Regexp auskennen. Ich danke dir sehr !!
Inkh Su Tesou
24

Wenn Sie wirklich die Windows-Befehlszeile verwenden möchten (wenn Sie etwas nicht herunterladen möchten), können Sie dies folgendermaßen tun:

dir /B > fileList.txt
for /f "tokens=1,2,3" %i in (fileList.txt) DO ren "%i %j %l" %l

Die erste Zeile gibt die Liste der Dateien in eine Datei mit dem Namen fileList.txt aus. Die zweite Zeile trennt jeden Namen in der Liste in 3 Teile, das #, das "-" und den Rest des Namens. Für jede von ihnen führt es den Befehl zum Umbenennen aus.

zdan
quelle
2
Entfernen Sie die erste Zeile, um es zu vereinfachen und tun Sie for /f "tokens=1,2,3" %i in ('dir /B') DO ren "%i %j %l" %l
Ich weiß, dass dies alt ist, aber es ist immer noch eine solide Antwort - nur% l (% L) sollte% k (% K) sein.
Donald Byrd
24

Mit AntRenamer können Sie ganz einfach ein Umbenennungsmuster definieren. es sind bereits viele vorbereitet (und es gibt eine Vorschau auf die Aktionen):

AntRenamer

Kostenlos für den persönlichen und kommerziellen Gebrauch.

Gnoupi
quelle
19

alte Schule:

Sie können ein DIR ausführen und die Ausgabe in eine Datei umleiten, wie in DIR * .TXT> TEMP.BAT

Verwenden Sie dann einen Editor, um das herauszunehmen, was Sie nicht benötigen, und ändern Sie die Teile, die Sie benötigen. Fügen Sie ein "@echo off" als oberste Zeile hinzu, speichern Sie es und führen Sie es aus.

WireGuy
quelle
Ich habe diesen Seitenverweis von einem Doktor der alten Schule erhalten: dostips.com/DosCommandIndex.htm ; Es ist erstaunlich, was man mit (gutem?) Alten DOS anfangen kann!
Nik
16

Eine weitere Option: Massive File Renamer

Es ermöglicht das einfache Umbenennen mehrerer Dateien und Dateierweiterungen . Es ist sehr schnell und einfach!

Für fortgeschrittene Benutzer und Entwickler ist es möglich, reguläre Ausdrücke zu verwenden .

Sehen Sie es in Aktion:

Bildbeschreibung hier eingeben

IvanRF
quelle
1
Übrigens, wie können wir es auswählen, um alle Dateien in Unterordnern zu öffnen? Ich habe einen Stammordner mit ungefähr 50 Unterordnern (rekursiv) und mehreren Dateien darin.
Pacerier
1
@ Pacerier Ich denke, die Java-Dateiauswahl erlaubt das nicht. Ich hatte die Idee, die Auswahl eines Ordners zuzulassen, und die rekursive Suche kann eingeschlossen werden. Ich werde das bemerken und in einer zukünftigen Version hinzufügen!
IvanRF
13

Ich benutze Total Commanders Multi-Rename-Tool (Strg + M) für solche Dinge. Das nützliche Tool, von dem es zu viele gibt, ist einfach zu verwenden und kann bei Bedarf auch reguläre Ausdrücke und Vorlagen verwenden. Oh, und natürlich erhalten Sie eine Vorschau, bevor Sie Änderungen vornehmen.

Dies ist die dritte oder vierte Frage, die ich beantwortet habe, um Total Commander zu empfehlen ... ich sollte eine Provision von ihnen bekommen ;-)

Yuval
quelle
11

Das Tool, mit dem ich zufrieden war, ist ReNamer . Es unterstützt auch das Speichern von Umbenennungsregeln, was mir nützlich war, da ich oft die gleichen Umbenennungen vornehme.

Im Folgenden finden Sie ein Beispiel für das Löschen von Text vor dem ersten Gedankenstrich. Sie können jedoch zahlreiche andere Regeln definieren.

Bildbeschreibung hier eingeben

Esko Luontola
quelle
5

Ich habe Free Commander Portable (Freeware) für diesen guten Effekt verwendet:

  1. Wählen Sie oder navigieren Sie zu den Dateien oder Verzeichnissen, die Sie umbenennen möchten
  2. Drücken Sie [Strg-M] (oder Datei> Mehrfach umbenennen)
  3. Füllen Sie die Felder so aus, wie es für Ihren Umstand sinnvoll ist
  4. Überprüfen Sie, ob die Vorschau Ihren Erwartungen entspricht
  5. Gehen!
Matt Wilkie
quelle
4

Für fortgeschrittene Benutzer und Entwickler würde ich RegexRenamer empfehlen .

RegexRenamer-Screenshot

Pro's:

  • Sehr einfache Benutzeroberfläche;
  • Reguläre Ausdrücke, mit denen die Entwickler vertraut sind;
  • GPLv2;

Con's:

  • Es ist keine Befehlszeile! :)
Bytebuster
quelle
Es konnte nicht für alle Unterordner des ausgewählten Ordners rekursiv gearbeitet werden!
Luckylooke
3

Hier ist eine Befehlszeilenlösung - ein Java-Programm, das ich speziell geschrieben habe, um die Arbeit mit "Mustern" in Dateinamen zu vereinfachen. Es ist kostenlos und Open Source, also zögern Sie nicht, es zu ändern:

RenameWand
http://renamewand.sourceforge.net/

Einige relevante Anwendungsbeispiele:

Löschen Sie alles vor "-"dem Dateinamen:

java -jar RenameWand.jar  "<a> - <b>"  "<b>"

Stellen Sie dem Dateinamen eine dreistellige Zahl voran, sortiert nach dem Zeitpunkt der letzten Änderung:

java -jar RenameWand.jar  "<a>"  "<3|#FT> <a>"

Ordnen Sie Teile des Dateinamens neu an und ändern Sie die Groß- / Kleinschreibung:

java -jar RenameWand.jar  "<album> - <artist> - <song>.<ext>" 
                          "<artist.upper> <album.title> - <song>.<ext.lower>"
Zach Scrivena
quelle
3

Ich habe RenPhoric vor ungefähr einem Monat entdeckt. Hervorragend. Und es ist kostenlos .

Keine komplizierte Oberfläche und ich konnte schnell genau das umbenennen, was ich wollte. Regulärer Ausdruck fähig. Ich habe seitdem nichts mehr benutzt.

Umber Ferrule
quelle
2

Ich mag Cylogs WildRename . Es ist leistungsstark und dennoch einfach zu bedienen und verfügt über eine Vielzahl von Funktionen:

  1. schnell
  2. String-Manipulation
  3. Zähler
  4. Wildcards
  5. Reguläre Ausdrücke
  6. Auswechslung
  7. Fall-Konvertierung
  8. Protokollierung
  9. Simulation (Ergebnisse anzeigen, ohne sie tatsächlich anzuwenden)

Bildbeschreibung hier eingeben

Synetech
quelle
2

Wie oben bei @zdan habe ich dies über die Befehlszeile gemacht (mit "cmd.exe" in Windows). Für meinen speziellen Fall musste ein wenig gebastelt werden, aber ein bisschen Nachforschungen haben es gelöst.

Wie zdan gebe ich die Liste in eine TXT-Datei aus, benutze sie dann tokensund delimsbenenne die Dateien entsprechend um. In meinem Fall habe ich mit einer Liste von Dateien mit dem folgenden Namen begonnen:

name-01-02-2012.csv

Ich wollte, dass der Dateidatumsteil in der Reihenfolge y / m / d und der "Name" -Teil am Ende so lautet:

2012-01-02-name.csv

Zu diesem Zweck habe ich den folgenden Code verwendet. Beachten Sie, dass auf diese Weise ALLE Teile des Dateinamens berücksichtigt werden, einschließlich der Erweiterung ".csv". Das hat mich das erste Mal verarscht.

dir /B > fileList.txt
for /f "tokens=1,2,3,4,5 delims=-." %i in (fileList.txt) DO ren "%i-%j-%k-%l.%m" %l-%j-%k-%i.%m

Das tokenssind die "Teile" des Dateinamens, das delimssind die Trennzeichen. Beachten Sie, dass ich in meinem Fall zwei Trennzeichen hatte (einen Bindestrich und einen Punkt).

Ich persönlich mag die App "Bulk Rename" nicht. Wie andere bereits erwähnt haben, ist die Benutzeroberfläche grausam und nicht sehr intuitiv. Mit ein wenig Recherche und einfacher Codierung können diese Dinge viel schneller und effizienter erledigt werden.

gtr1971
quelle
2

Lustiges Namens- und Kommandozeilen-Tool sehr mächtig, sehr schnell und extrem einfach zu bedienen. "Suchen und Ersetzen von Text" FART http://fart-it.sourceforge.net/ FUNKTIONIERT GROSSARTIG! kann Wörter auch in txt-Dateien umbenennen.

VERWENDUNGSZWECK

Usage: FART [options] [--] <wildcard>[,...] [find_string] [replace_string]

Options:
 -h --help          Show this help message (ignores other options)
 -q --quiet         Suppress output to stdio / stderr
 -V --verbose       Show more information
 -r --recursive     Process sub-folders recursively
 -c --count         Only show filenames, match counts and totals
 -i --ignore-case   Case insensitive text comparison
 -v --invert        Print lines NOT containing the find string
 -n --line-number   Print line number before each line (1-based)
 -w --word          Match whole word (uses C syntax, like grep)
 -f --filename      Find (and replace) filename instead of contents
 -B --binary        Also search (and replace) in binary files (CAUTION)
 -C --c-style       Allow C-style extended characters (\xFF\0\t\n\r\\ etc.)
    --cvs           Skip cvs dirs; execute "cvs edit" before changing files
 -a --adapt         Adapt the case of replace_string to found string
 -b --backup        Make a backup of each changed file
 -p --preview       Do not change the files but print the changes
slm
quelle
Noch ein paar Details? Benennt es Dateien um ?
Vonbrand
Ja, -fOption, wie aufgelistet.
user1016274
2

Multi Rename Script ist eine Open-Source-Alternative zum Total Commanders Multi Rename Tool, das Sie über Script ausführen können. Es kann TC-Plugins für Metadateninformationen verwenden.

https://code.google.com/p/multi-rename-script/ http://multi-rename-script.googlecode.com/svn/trunk/docs/res/MRS.PNG

Majkinetor
quelle
2
@echo aus
setlocal enabledelayedexpansion
setze X = 5
setze FOLDER_PATH =.
pushd% FOLDER_PATH%
für %% f in (*) do if %% f neq% ~ nx0 (
    setze "filename = %% ~ nf"
    setze "filename =! filename: ~% X%!"
    ren "%% f" "! filename! %% ~ xf"
)
popd

Speichern Sie dies in einer Batch-Datei und führen Sie

bbm123
quelle
Das ist gut, aber wie kann ich das X zu einer Variablen machen (als Parameter übergeben)?
Kangkan,
@ Kangkan wie folgt:set /p "X=Enter the value for X: "
Kidquick
1

Ich verwende Blackboard, um Kurse an einer Universität zu verwalten. Wenn ich eine Zuweisung in großen Mengen herunterlade (in Blackboard oben in der Benotungsspalte auf "Zuweisungsdatei herunterladen" klicken, fügt Blackboard dem Dateinamen einige zusätzliche Informationen hinzu, sodass der Dateiname unter Windows nicht mehr gültig ist.

So sehen sie aus:

Recitation20Assignment_studentname_attempt_2013-03-01-20-03-09_Exercise28129.docx

Und das wollte ich

studentname.docx

Also habe ich den von @zdan und @ gtr1971 empfohlenen Ansatz verwendet, indem ich ein Befehlsfenster für den Ordner mit den darin enthaltenen Dateien (CMD.EXE) geöffnet habe. Führen Sie dann diesen Befehl aus, um alle Dateinamen in ein Dokument einzufügen.

dir /b >filelist.txt

Bearbeiten Sie das Dokument und entfernen Sie Ordnernamen usw.

Verwenden Sie diesen Befehl, um den von Blackboard hinzugefügten Dateinamen durch den Benutzernamen und die Dateierweiterung zu ersetzen.

for /f "tokens=1,2,3,4,5,6 delims=_." %i in (filelist.txt) do ren "%i _%j_%k_%l_%m.%n" %j.%n

Hoffe, das hilft auch jemand anderem.

Webmentorman
quelle
1

Ich habe ein hybrides JScript / Batch-Befehlszeilen-Dienstprogramm namens JREN.BAT entwickelt , mit dem Dateien oder Ordner umbenannt werden können, indem nach Namen gesucht und diese durch reguläre Ausdrücke ersetzt werden. Es ist ein reines Skript, das nativ auf jedem Windows-Computer ab XP ausgeführt werden kann. Die vollständige Dokumentation ist in das Skript eingebettet.

Angenommen, JREN.BAT befindet sich in Ihrem aktuellen Verzeichnis oder besser noch irgendwo in Ihrem Pfad, dann wird Ihre Umbenennungsaufgabe trivial.

jren "^\d+[ -]+(.+)\.txt$" "$1" /i

oder

jren "^\d+[ -]+(?=.+\.)" "" /fm "*.txt"

Es gibt viele Optionen, einschließlich der /SOption, mit der die Umbenennung für Unterverzeichnisse rekursiv durchgeführt wird.

dbenham
quelle
0

Wenn Sie ernsthafte Leistung benötigen und bereit sind, das Geld zu bezahlen ... PowerGrep ist eines der leistungsfähigsten und vielseitigsten Tools auf dem Markt ... Sie können mit PowerGrep fast alles umbenennen ... sogar binäres Suchen und Ersetzen ... Es wurde von RegEx Guru, Jan Goyvaerts erstellt .

Bildbeschreibung hier eingeben

Eddie B
quelle
Dieses Dienstprogramm ist wahnsinnig teuer ...
Wizard79
Sie können es auf unbestimmte Zeit kostenlos nutzen ... aber es lohnt sich ... Ich benutze es die ganze Zeit.
Eddie B