Como renomear todas as pastas e arquivos de uma pasta para MAIÚSCULAS? (se for possível também em suas subpastas)
Eu tenho esse código, mas ele converte apenas arquivos, não pastas.
@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
Responder1
Solução não recursiva.
Não sei cmd.exe
, então não posso consertar seu script, mas se você tiver o Python instalado, poderá usar este script (que deve funcionar em todos os sistemas operacionais):
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)
Basta salvá-lo como upcase_files_folders.py
e executar python upcase_files_folders.py
no diretório cujos arquivos você deseja renomear.
Atualização: solução recursiva.
Desculpe, acabei de perceber que você queria uma solução recursiva.
O script a seguir percorrerá a árvore de subdiretórios, gravando os arquivos e subdiretórios a serem renomeados em uma pilha. Em seguida, ele retira os arquivos/subdiretórios da pilha, um por um, e os aumenta.
(Uma solução em dois estágios é melhor, para evitar renomear diretórios no meio da travessia. Tentar fazer tudo de uma vez será frágil e sujeito a erros.)
Além disso, provavelmente é melhor manter um registro das alterações caso você execute o script por engano. Este script registrará todas as renomeações em 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 )