¿Cómo se cambia el nombre de todas las carpetas y archivos de una carpeta a MAYÚSCULAS? (si es posible en sus subcarpetas también)
Tengo este código, pero solo convierte archivos, no carpetas.
@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
Respuesta1
Solución no recursiva.
No lo sé cmd.exe
, así que no puedo arreglar tu script, pero si tienes Python instalado, puedes usar este script (que debería funcionar en todos los sistemas operativos):
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)
Simplemente guárdelo como upcase_files_folders.py
y luego ejecútelo python upcase_files_folders.py
en el directorio cuyos archivos desea cambiar de nombre.
Actualización: solución recursiva.
Lo siento, me acabo de dar cuenta de que querías una solución recursiva.
El siguiente script recorrerá el árbol de subdirectorios y registrará los archivos y subdirectorios cuyo nombre se cambiará en una pila. Luego extrae los archivos/subdirectorios de la pila uno por uno y los pone en mayúsculas.
(Lo mejor es una solución de dos etapas para evitar cambiar el nombre de los directorios en medio del recorrido. Intentar hacerlo todo a la vez será propenso a errores y frágil).
Además, probablemente sea mejor mantener un registro de los cambios en caso de que ejecute el script por error. Este script registrará todos los cambios de nombre en formato .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 )