1

Как переименовать все папки и файлы в папке в верхний регистр? (если это возможно и в его подпапках)

У меня есть этот код, но он конвертирует только файлы, а не папки.

@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

1 ответ1

0

Нерекурсивное решение.

Я не знаю cmd.exe , поэтому я не могу исправить ваш скрипт, но если у вас установлен Python, вы можете использовать этот скрипт (который должен работать на всех ОС):

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)

Просто сохраните его как upcase_files_folders.py и затем запустите python upcase_files_folders.py в каталоге, файлы которого вы хотите переименовать.


Обновление: рекурсивное решение.

Извините, я только что понял, что вы хотели рекурсивное решение.

Следующий скрипт будет обходить дерево подкаталогов, записывая файлы и подкаталоги, которые будут переименованы в стеке. Затем он извлекает файлы / подкаталоги из стека один за другим и помещает их в регистр.

(Лучше всего двухэтапное решение, чтобы избежать переименования каталогов в середине обхода. Попытка сделать все сразу будет подвержена ошибкам и хрупка.)

Также, вероятно, лучше вести журнал изменений на случай, если вы запустите скрипт по ошибке. Этот скрипт будет записывать все переименования в .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 )

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .