2009-11-04 00:22:52 +0000 2009-11-04 00:22:52 +0000
65
65

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

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 mit nur Windows (XP oder 7) zu tun.

Antworten (13)

128
128
128
2012-04-14 13:25:17 +0000

Gehen 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, falls jemand etwas ändern/verbessern möchte:

  • for /f - Für jede Zeile
  • "Tokens=*" - Verarbeiten Sie jedes Element in jeder Zeile.
  • %f in (...) - %f ist Ihr Variablenname für jedes Element.
  • dir - listet alle Dateien und Unterverzeichnisse 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 Kopfzeilen.
  • /a-d - (Parameter für dir) Listet nicht die Verzeichnisse auf. (a steht für attribute, - steht für not und d steht für directory).
  • rename "%f" "%f"- die Datei mit ihrem eigenen Namen umbenennen, der eigentlich durch die Kombination dir und /l kleingeschrieben wird.
18
18
18
2009-11-04 00:26:39 +0000

spacetornado Renamer ist ein Windows-Programm, das massenhaft Dateien in Stapeln umbenennt. Sie können Text suchen und ersetzen, eine bestimmte Anzahl von Zeichen entfernen, die Groß- und Kleinschreibung oder den ersten Buchstaben in Großbuchstaben ändern und Text an den Anfang oder das Ende (anhängen/voranstellen) jedes Dateinamens anfügen

12
12
12
2015-02-24 18:33:51 +0000

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 innerhalb des Stammordners und der Unterordner werden umbenannt
  • Ordnernamen werden mit Where {-Not $_.PSIsContainer} | ausgeschlossen
9
9
9
2016-07-21 22:07:04 +0000

Hier ist eine richtige rekursive Kommandozeilenlösung, die nur native cmd.exe-Befehle verwendet und tatsächlich funktioniert. Ich glaube, es ist die einfachste mögliche 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, dann ist eine weitere Option mein JREN.BAT Dienstprogramm zur Umbenennung regulärer Ausdrücke , das Optionen zur Umwandlung von Namen in Groß- oder Kleinschreibung unterstützt. Es ist ein reines Skript (Hybrid JScript/Batch), das nativ auf jedem Windows-Rechner ab XP läuft - es werden keine Exe-Dateien von Drittanbietern benötigt. Die vollständige Dokumentation ist integriert - der Zugriff erfolgt von der Kommandozeile aus über jren /?, oder jren /??, wenn Sie eine seitenweise Ausgabe wünschen.

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

jren "^" "" /s /l
6
6
6
2009-12-05 20:17:27 +0000

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

5
5
5
2016-05-06 15:53:33 +0000

“Rekursive” Version der akzeptierten Antwort (die 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"')

Holt eine Liste der absoluten Pfade aller Verzeichnisse innerhalb der aktuellen (einschließlich dieser):

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")

holt eine Liste aller Dateinamen (oder Datei- und _Verzeichnisnamen, wenn Sie den Schalter /a-d herausnehmen) innerhalb jedes der absoluten Pfade, die von der ersten Schleife gefunden wurden, und konvertiert die Namen dieser Dateien in Kleinbuchstaben.

  • C:\Foo\ TO.txt

  • C:\Foo\Bar\ LOWER.txt

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


* braucht es zwei Schleifen, weil das zweite Argument zu rename ein Dateiname sein muss und nicht ein absoluter Pfad (wie der, den man mit dem Schalter /s erhält).

3
3
3
2013-04-07 17:06:17 +0000

Sie könnten eine “Zeichenersatz”-Strategie verwenden…

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

…und so weiter, für die Buchstaben A-Z. Sie könnten es wahrscheinlich in Form einer FOR-Schleife implementieren.

1
1
1
2011-03-03 00:33:58 +0000

Das beste Programm für diese Aufgabe unter Windows ist Bulk Rename Utility . Es ist ein mans-Tool. Sie können sogar Regex zum Umbenennen von Dateien und/oder Ordnern verwenden. Es hat auch eine Shell-Integration (so dass Sie es vom Explorer aus mit einem Rechtsklick ausführen können), was sehr schön ist. Es sind 64-Bit- und 32-Bit-Versionen verfügbar.

1
1
1
2009-11-04 00:56:45 +0000

http://www.dostips.com/DtCodeCmdLib.php#Function.toLower gibt eine einfache Funktion, die Sie in eine Batch-Datei einbinden und aufrufen können sollten.

Lassen Sie also die Batch-Datei über die Ordner/Dateinamen iterieren und rufen Sie diese Funktion auf, um die Kleinbuchstaben-Version des Namens zu generieren.

1
1
1
2009-12-05 19:54:00 +0000

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

Nur mit Standardbefehlen habe ich die Skripte LwrCase.bat und LwrCase_Folder.bat erstellt, um einen Dateinamen in Kleinbuchstaben umzubenennen, oder alle Dateinamen in einem Ordner in Kleinbuchstaben umzubenennen.

Um einen Dateinamen in Kleinbuchstaben umzubenennen, verwenden Sie:

[call] LwrCase FullyQualifiedFileName

Wobei FullyQualifiedFileName der voll qualifizierte Dateiname ist, der umbenannt werden soll.

Um alle Dateinamen in einem Verzeichnis umzubenennen, verwenden Sie:

[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]

, wobei FullyQualifiedDirectoryName der voll qualifizierte Ordnerpfad ist und /S ein optionaler Parameter ist, der auch die Dateinamen in allen Unterordnern umbenennen wird.

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
1
1
1
2017-05-30 15:01:22 +0000

Die akzeptierte Antwort ](https://superuser.com/q/65302/150988#412413) auf diese Frage, von loftysnake , funktioniert für das aktuelle Verzeichnis, durchsucht aber keine Unterordner. &nbsp Sawny schlug eine einfache Modifikation der Antwort von loftysnake vor, um sie rekursiv zu machen, aber das funktioniert nicht, denn während Sie mit dem Befehl rename ein Laufwerk und einen Pfad mit Dateiname1 (der Quelle) angeben können, muss Dateiname2 (das Ziel) nur ein Dateiname sein.  Um die Hilfemeldung (/?) zu zitieren:

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

Aber move funktioniert, wo rename nicht funktioniert, also können Sie mit diesem Befehl Dateien 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 mit Verzeichnispfaden umgehen kann.

Der obige Befehl funktioniert, wenn er direkt in die Eingabeaufforderung (CMD.EXE) eingegeben wird.  Wenn Sie dies aus einer Batch-Datei (.BAT) heraus tun wollen, 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 und das /y weglassen und einfach do move … sagen.

0
0
0
2014-11-06 00:08:21 +0000

Rekursive Lösung. Geben Sie dies in eine rekursive Datei “recursiverename.cmd” 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
)
0
0
0
2016-03-30 10:50:39 +0000

Powershell

Navigieren Sie zu dem Verzeichnis und führen Sie es aus:

dir | Rename-Item -NewName { $_.Name.ToLowerInvariant() }

Ich habe überprüft, dass dies funktioniert. Gefunden hier: http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx