Gibt es eine Möglichkeit, Dateien im Batch in Kleinbuchstaben umzubenennen?

63

Ich brauche eine Möglichkeit, alle Dateien in Ordnern und Unterordnern in Kleinbuchstaben umzubenennen.

Ich würde gerne wissen, ob es eine Möglichkeit gibt, dies nur unter Windows (XP oder 7) zu tun.

ino
quelle
Windows unterscheidet nicht wie Unix zwischen Kapitälchen und Großbuchstaben. Wenn Sie sagten, warum Sie das brauchen, würde es Ihnen vielleicht helfen, das Problem zu lösen.
Rook
1
@Idigas. Entschuldigung, aber seit NTFS wurde bei Dateinamen zwischen Groß- und Kleinschreibung unterschieden. Siehe support.microsoft.com/kb/100625
DaveParillo,
Einfach toll. Nehmen Sie eine schlechte Idee und verbreiten Sie sie weiter. Was für ein Support-Albtraum, wenn jemand eine Datei und einen Fehler mit fetten Fingern sendet, bedeutet, dass er "Answers.dat" gesendet hat und der eingehende Prozess "answers.dat" erwartet. Es gibt einfach keinen guten Grund, diese beiden Namen als "unterschiedlich" zu betrachten.
David
2
@David, zum Beispiel, Java benötigt tatsächlich Dateinamen, bei denen zwischen Groß- und Kleinschreibung unterschieden wird. Auf nicht zwischen Groß- und Kleinschreibung abhängigen Dateisystemen kann dies zu erheblichen Problemen führen.
Arjan
10
Ich weiß, dass dies alt ist, aber ich wollte hier ein Missverständnis klären. Während NTFS Groß- und Kleinschreibung unterstützt, unterscheidet das Windows-Betriebssystem NICHT!
Geo

Antworten:

122

Wechseln Sie in das Verzeichnis und führen Sie den folgenden Befehl aus:

for /f "Tokens=*" %f in ('dir /l/b/a-d') do (rename "%f" "%f")

Hier ist die Aufschlüsselung für den Fall, dass jemand etwas ändern / verbessern möchte:

  • for /f - Für jede Zeile
  • "Tokens=*" - Verarbeiten Sie jeden Artikel in jeder Zeile.
  • %f in (...)- %fist Ihr Variablenname für jeden Artikel.
  • dir - listet jede Datei und jedes Unterverzeichnis in einem Verzeichnis auf.
  • /l- (Parameter für dir) Verwendet Kleinbuchstaben.
  • /b- (Parameter für dir) Verwendet das reine Format, nur die Datei- / Verzeichnisnamen, keine Größe, keine Überschriften.
  • /a-d- (Parameter für mich) Sie nicht Liste Verzeichnisse . ( asteht für attribute, -steht für notund dsteht für directory) .
  • rename "%f" "%f"- Benennen Sie die Datei mit einem eigenen Namen um, der durch den dirBefehl und die /lKombination in eine niedrigere Schreibweise umgewandelt wird .
Hochschlange
quelle
7
Rekursive Version: for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (rename "%f" "%f")(fügte / r zu dir hinzu).
Sawny
3
Dies ist nur brillant
Shir Gans
4
Die rekursive Version hat bei mir nicht funktioniert - Rename hat beanstandet, dass der Befehl ein ungültiges Format hat. Es stellte sich heraus, dass das / s dazu führte, dass die zweite Datei als absoluter Pfad aufgeführt wurde, und die Dateinamenerweiterung (% ~ nxf) gab mir den ursprünglichen Dateinamen in Großbuchstaben. Endete nur manuell rekursiv.
Dogmatixed
3
Dies ist eine sehr schöne Antwort. auf den Punkt gebracht, keine externen Programme erforderlich, nette und kleine Befehle, keine Batch-Datei-Kompliziertheit erforderlich.
Jeff Wilbert
2
Kann es geändert werden, um Kleinbuchstaben in Großbuchstaben zu ändern?
Chucky
18

spacetornado Renamer ist ein Windows-Programm, das Massenmengen von Dateien in Batches umbenennt . Sie können Text suchen und ersetzen, eine bestimmte Anzahl von Zeichen entfernen, die Groß- und Kleinschreibung in Groß- und Kleinschreibung oder in Großbuchstaben ändern und Text an den Anfang oder das Ende (Anhängen / Voranstellen) jedes Dateinamens einfügen

Bildbeschreibung hier eingeben

Joe
quelle
1
Bitte geben Sie mir den Grund für die Abwahl an.
Joe
5
Die Leute erklären leider selten: /
Gnoupi
7
Ich denke, die Ablehnung lag daran, dass das OP eine Lösung wollte, die ohne zusätzliche Software auskommt. Und ich denke, die Ablehnung wurde nicht erklärt, weil einige Leute dazu neigen, Rache-Ablehnungen auszuteilen.
4.
Die GUI ist ein bisschen funky, aber sie macht den Job besser als einige andere Renamer, die ich da draußen gesehen habe.
Jcollum
1
Es hat genau das getan, was ich getan habe, als ich rekursives Umbenennen zum Bereinigen von Dateien von einem Linux-FTP-Server benötigte ... musste es jedoch als Admin ausführen, bevor es richtig funktionierte. Fühlt sich an wie ein altes, ungepflegtes Programm :)
Nelson
12

Seit Windows 7 können Sie PowerShell für diese Aufgaben verwenden

Get-ChildItem "C:\path\to\folder" -recurse | 
  Where {-Not $_.PSIsContainer} | 
  Rename-Item -NewName {$_.FullName.ToLower()}

- Wählen Sie Ihren Stammordner
- Alle Dateien im Stammordner und in den Unterordnern werden umbenannt
- Ordnernamen werden mit ausgeschlossen Where {-Not $_.PSIsContainer} |

Nixda
quelle
7

Hier ist eine richtige rekursive Befehlszeilenlösung, die nur native cmd.exe-Befehle verwendet, die tatsächlich funktionieren. Ich glaube, es ist die einfachste native Lösung:

for /r %D in (.) do @for /f "eol=: delims=" %F in ('dir /l/b/a-d "%D"') do @ren "%D\%F" "%F"

Wenn Sie bereit sind, über native cmd.exe-Befehle hinauszugehen, ist meine JREN.BAT-Funktion zum Umbenennen von regulären Ausdrücken eine weitere Option , die Optionen zum Konvertieren von Namen in Groß- oder Kleinbuchstaben unterstützt. Es ist ein reines Skript (hybrides JScript / Batch), das auf jedem Windows-Computer ab XP nativ ausgeführt wird - es werden keine exe-Dateien von Drittanbietern benötigt. Die vollständige Dokumentation ist integriert. Der Zugriff erfolgt über die Befehlszeile jren /?oder jren /??wenn Sie eine Seitenausgabe wünschen.

Mit JREN ist die rekursive Lösung so einfach wie:

jren "^" "" /s /l
dbenham
quelle
1
Funktioniert super. FYI den /a-dSchalter entfernen und es wird auch die Ordnernamen in Kleinbuchstaben.
Keith
Versucht, es als Batch-Datei zu speichern und in system32 zu kopieren, damit ich es jederzeit mit einem einzigen Befehl ausführen kann. Daraus " D"') was unexpected at this time.ergibt sich Folgendes: Die Ausführung als direkter Befehl funktioniert einwandfrei. Bei der Ausführung als Batchdatei funktioniert dies nur nicht. Ich bin mir nicht sicher, wie ich es als Batch-Datei einrichten soll, dachte aber, ich würde mich mit dem Problem befassen.
Don Cullen
1
@DonCullen - Es ist Standardsyntax, dass FOR-Variablenprozente verdoppelt werden müssen, wenn FOR in einem Stapelskript verwendet wird. Also %Dmuss nach %%Dund %Fnach %%Fgewechselt werden , wenn Sie den Befehl in ein Batch-Skript einfügen.
Dbenham
Jeden Tag etwas Neues lernen. Vielen Dank!
Don Cullen
6

Mein persönliches Lieblingsdienstprogramm zum Umbenennen von Stapeldateien ist Cylogs WildRename . Neben vielen anderen Funktionen kann die Groß- und Kleinschreibung von Dateinamen geändert werden. Das Beste an WildRename ist wahrscheinlich, dass es reguläre Ausdrücke unterstützt!

Synetech
quelle
Dies ist die richtige App, nach der Installation in 10 Sekunden. Ich habe einen Remote-Ordner rekursiv konfiguriert und umbenannt (der Einfachheit halber zugeordnet).
Matteo Conta
5

"Rekursive" Version der akzeptierten Antwort (funktioniert *)

for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"') do (for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g"))


Die erste Schleife

for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"')

Ruft eine Liste der absoluten Pfade aller Verzeichnisse im aktuellen (einschließlich) ab:

C: \ Foo>

  • C: \ Foo \ TO.txt

  • C: \ Foo \ Bar \ LOWER.txt

  • C: \ Foo \ Bar \ Baz \ CASE.txt


Die zweite Schleife

for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g")

Ruft eine Liste aller Dateinamen (oder Datei- und Verzeichnisnamen , wenn Sie den /a-dSchalter entfernen) in jedem der absoluten Pfade ab, die von der ersten Schleife gefunden wurden , und konvertiert den Namen dieser Dateien in Kleinbuchstaben.

  • C: \ Foo \ TO.txt

  • C: \ Foo \ Bar \ LOWER.txt

  • C: \ Foo \ Bar \ Baz \ CASE.txt


* Es werden zwei Schleifen benötigt, da das zweite Argument renameein Dateiname und kein absoluter Pfad sein muss (wie der vom /sSwitch erhaltene).

wc.matteo
quelle
Warum hast du cmd /c "echo %cd%& in der ersten for? Es ist völlig unnötig.
DavidPostill
@DavidPostill echo %cd%dient zum Hinzufügen des aktuellen Ordners zur Liste der absoluten Pfade . und cmd /cmacht &Arbeit, um Befehle zu kombinieren. Ich bin ein absoluter Neuling in Bezug auf Windows Batch Scripting . Wenn Sie einen besseren Weg kennen, können Sie die Antwort gerne verbessern!
wc.matteo
Ausgezeichnete Arbeit für einen Noob. Ihre war die erste native cmd.exe-Befehlszeilenlösung, die tatsächlich funktioniert, mit der Ausnahme, dass sie fehlschlägt, wenn ein Name mit einem Leerzeichen oder einem Semikolon beginnt. Die akzeptierte Antwort weist dasselbe Problem auf. Siehe meine Antwort für eine einfachere Antwort, die auch mit führenden Leerzeichen oder Semikolon funktioniert.
Dbenham
Kann dies geändert werden, um niedrigere in Caps umzuwandeln?
Rishav
3

Sie könnten eine "Charakterersatz" -Strategie verwenden ...

set Name=%Name:A=a%
set Name=%Name:B=b%
set Name=%Name:C=c%

... und so weiter für Buchstaben AZ. Sie könnten es wahrscheinlich in Form einer FOR-Schleife implementieren.

DednDave
quelle
1

http://www.dostips.com/DtCodeCmdLib.php#Function.toLower bietet eine einfache Funktion, die Sie einschließen und aus einer Batch-Datei aufrufen können sollten.

Lassen Sie die Batch-Datei also die Ordner / Dateinamen durchlaufen und rufen Sie diese Funktion auf, um die Kleinbuchstabenversion des Namens zu generieren.

Kevin Haines
quelle
1

Von http://windowsitpro.com/articles/index.cfm?articleid=81612 :

Ich verwende nur Standardbefehle und habe LwrCase.bat und LwrCase_Folder.bat mit Skripts versehen, um einen Dateinamen in Kleinbuchstaben oder alle Dateinamen in einem Ordner in Kleinbuchstaben umzubenennen.

Verwenden Sie zum Umbenennen eines Dateinamens in Kleinbuchstaben Folgendes:

[call] LwrCase FullyQualifiedFileName

Wobei FullyQualifiedFileName der vollständig qualifizierte Dateiname ist, der umbenannt werden soll.

Um alle Dateinamen in einem Verzeichnis umzubenennen, verwenden Sie:

[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]

Dabei ist FullyQualifiedDirectoryName der vollständig qualifizierte Ordnerpfad und / S ein optionaler Parameter, mit dem auch die Dateinamen in allen Unterordnern umbenannt werden.

Hinweis: LwrCase.bat verwendet den Schalter / L des Befehls DIR, der Namen in Kleinbuchstaben zurückgibt.

LwrCase.bat enthält:

@echo off
if {%1}=={} @echo Syntax: LwrCase FullyQualifiedFileName&goto :EOF
if not exist %1 @echo LwrCase - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
 set file=%%a
)
if /i "%file:~0,1%" EQU "d" @echo LwrCase - %1 is NOT a file.&endlocal&goto :EOF
for /f "Tokens=*" %%f in ('dir %1 /L /b /a /a-d') do (
 Rename %1 "%%f"
)
endlocal

LwrCase_Folder.bat enthält:

@echo off
if {%1}=={} @echo Syntax: LwrCase_Folder FullyQualifiedDirectoryName&goto :EOF
if not exist %1 @echo LwrCase_Folder - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
 set folder=%%a
)
if /i "%folder:~0,1%" NEQ "d" @echo LwrCase_Folder - %1 is NOT a folder.&endlocal&goto :EOF
pushd %1
set sw=/B /A /A-D
if /i {%2}=={/S} set sw=%sw% %2
for /f "Tokens=*" %%f in ('dir %sw%') do (
 call LwrCase "%%f"
)
popd
endlocal
Sogar Mien
quelle
1

Das beste Programm, um dies in Windows zu tun, ist Bulk Rename Utility . Es ist ein Werkzeug des Mannes. Sie können sogar Regex verwenden, um Dateien und / oder Ordner umzubenennen. Es hat auch Shell-Integration (so können Sie vom Explorer mit einem Rechtsklick ausführen), was sehr schön ist. 64-Bit- und 32-Bit-Versionen verfügbar.

Ubiquibacon
quelle
1

Die von loftysnake akzeptierte Antwort auf diese Frage funktioniert für das aktuelle Verzeichnis, durchsucht jedoch keine Unterordner.  Sawny schlug vor , die Antwort von loftysnake einfach zu ändern , um sie rekursiv zu machen, aber dies funktioniert nicht, da mit dem renameBefehl ein Laufwerk und ein Pfad mit Dateiname1 (Quelle) angegeben werden können und Dateiname2 (Ziel) nur ein Dateiname sein muss . So zitieren Sie die help ( /?) -Meldung:

… Sie können kein neues Laufwerk oder keinen neuen Pfad für Ihre Zieldatei angeben.

Funktioniert aber movewo renamenicht, so können Sie Dateien mit diesem Befehl rekursiv in Kleinbuchstaben umbenennen:

for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (move /y "%f" "%f")

denn es stellt sich heraus, dass MoveVerzeichnispfade bewältigen können.

Der obige Befehl funktioniert, wenn er direkt in die Eingabeaufforderung ( CMD.EXE) eingegeben wird . Wenn Sie dies aus einer batch ( .BAT) -Datei heraus tun möchten, müssen Sie die %Zeichen verdoppeln :

for /f "Tokens=*" %%f in ('dir /l/b/a-d/s') do (move /y "%%f" "%%f")

Und Sie können wahrscheinlich die Klammern weglassen und /y einfach sagen do move ….

Adrian
quelle
Wenn Sie Informationen, die andere bereits gepostet haben, erneut veröffentlichen möchten, müssen Sie den / die ursprünglichen Autor (en) identifizieren und einen Link zu deren Beitrag (en) erstellen.
Scott
Sorry, aber ich wurde darauf hingewiesen , dass movegearbeitet , wo renamenicht, und ich glaube , ich bin der einzige, der die Verwendung der vorgeschlagen hat moveBefehl hier. Ich habe einfach die Vorschläge von @loftysnake und @sawny aufgegriffen und sie hoffentlich ein bisschen verbessert.
Adrian
Das ist komisch; Ich dachte, jemand anderes hätte es erwähnt move, aber ich kann es jetzt nicht finden.
Scott
0

Rekursive Lösung. Fügen Sie dies in eine recursiverename.cmd-Datei ein.

for /f "Tokens=*" %%f in ('dir /l/b/a-d') do (rename "%%f" "%%f")
for /r /d %%x in (*) do (
    pushd "%%x"
    for /f "Tokens=*" %%f in ('dir /l/b/a-d') do (rename "%%f" "%%f")
    popd
)
Mick
quelle