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.
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.
Antworten:
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 (...)
- %f
ist 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 . ( a
steht für attribute
, -
steht für not
und d
steht für directory
) .rename "%f" "%f"
- Benennen Sie die Datei mit einem eigenen Namen um, der durch den dir
Befehl und die /l
Kombination in eine niedrigere Schreibweise umgewandelt wird .for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (rename "%f" "%f")
(fügte / r zu dir hinzu).
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
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} |
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
/a-d
Schalter entfernen und es wird auch die Ordnernamen in Kleinbuchstaben.
" 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.
%D
muss nach %%D
und %F
nach %%F
gewechselt werden , wenn Sie den Befehl in ein Batch-Skript einfügen.
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!
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"))
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
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-d
Schalter 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 rename
ein Dateiname und kein absoluter Pfad sein muss (wie der vom /s
Switch erhaltene).
cmd /c "echo %cd%&
in der ersten for
? Es ist völlig unnötig.
echo %cd%
dient zum Hinzufügen des aktuellen Ordners zur Liste der absoluten Pfade . und cmd /c
macht &
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!
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.
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
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.
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 rename
Befehl 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 move
wo rename
nicht, 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 Move
Verzeichnispfade 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 …
.
move
gearbeitet , wo rename
nicht, und ich glaube , ich bin der einzige, der die Verwendung der vorgeschlagen hat move
Befehl hier. Ich habe einfach die Vorschläge von @loftysnake und @sawny aufgegriffen und sie hoffentlich ein bisschen verbessert.
move
, aber ich kann es jetzt nicht finden.
Power Shell
Navigieren Sie zum Verzeichnis und führen Sie Folgendes aus:
dir | Rename-Item -NewName { $_.Name.ToLowerInvariant() }
Ich habe überprüft, dass dies funktioniert. Gefunden hier: http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx