Como tornar maiúsculas todos os arquivos e pastas em um diretório?

1

Como alguém renomeia todas as pastas e arquivos em uma pasta para o UPPERCASE?  (se é possível em suas subpastas também)

Eu tenho este 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
    
por seçkin bilgiç 22.05.2015 / 21:53

1 resposta

0

Solução não recursiva.

Eu não sei cmd.exe , então não posso consertar seu script, mas se você tiver o Python instalado, você pode 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, em seguida, 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 abre os arquivos / subdiretórios da pilha, um por um, e atualiza-os.

(Uma solução de dois estágios é melhor, para evitar renomear diretórios no meio da travessia. Tentar fazer tudo de uma vez vai ser propenso a erros e frágil.)

Além disso, provavelmente é melhor manter um log das alterações caso você execute o script com erro. Este script registrará todas as renomeações em .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 )
    
por 22.05.2015 / 23:12