Wie kann man alle Dateien und Ordner in einem Verzeichnis in Großbuchstaben umwandeln?

Wie kann man alle Dateien und Ordner in einem Verzeichnis in Großbuchstaben umwandeln?

Wie benennt man alle Ordner und Dateien in einem Ordner in GROSSBUCHSTABEN um? (falls dies auch in den Unterordnern möglich ist)

Ich habe diesen Code, aber er konvertiert nur Dateien, keine Ordner.

@echo off
setlocal enableDelayedExpansion

pushd %currentfolder%

for %%f in (*) do (
   set "filename=%%~f"

   for %%A in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
      set "filename=!filename:%%A=%%A!"
   )
   ren "%%f" "!filename!" >nul 2>&1
)
endlocal

Antwort1

Nicht-rekursive Lösung.

Ich weiß es nicht cmd.exe, also kann ich Ihr Skript nicht reparieren, aber wenn Sie Python installiert haben, können Sie dieses Skript verwenden (das auf allen Betriebssystemen funktionieren sollte):

import os

files = os.listdir('.')
for f in files:
    newname = f.upper()
    if newname == f:
        continue
    if newname in files:
        print( "error: %s already exists" % newname )
    os.rename(f, newname)

Speichern Sie es einfach unter upcase_files_folders.pyund führen Sie es dann python upcase_files_folders.pyin dem Verzeichnis aus, dessen Dateien Sie umbenennen möchten.


Update: Rekursive Lösung.

Entschuldigen Sie, mir ist gerade aufgefallen, dass Sie eine rekursive Lösung wollten.

Das folgende Skript durchläuft den Unterverzeichnisbaum und zeichnet die umzubenennenden Dateien und Unterverzeichnisse auf einem Stapel auf. Anschließend nimmt es die Dateien/Unterverzeichnisse einzeln aus dem Stapel und ändert die Groß-/Kleinschreibung.

(Am besten ist eine zweistufige Lösung, um die Umbenennung von Verzeichnissen mitten im Durchlauf zu vermeiden. Der Versuch, alles auf einmal zu tun, ist fehleranfällig und problematisch.)

Außerdem ist es wahrscheinlich am besten, ein Protokoll der Änderungen zu führen, falls Sie das Skript versehentlich ausführen. Dieses Skript zeichnet alle Umbenennungen in auf .upcase_files_folders.log.

from __future__ import print_function
import os

with open('.upcase_files_folders.log','a') as logfile:
    renames = []
    for d, subdirs, fs in os.walk(os.getcwd()):
        for x in fs + subdirs:
            oldname = os.path.join(d, x)
            newname = os.path.join(d, x.upper())
            if x == '.upcase_files_folders.log' or newname == oldname:
                continue
    for (oldname, newname) in reversed(renames):
        os.rename(oldname, newname)
        print( "renamed:  %s  -->  %s" % (repr(oldname), repr(newname)), file = logfile )

verwandte Informationen