
Как переименовать все папки и файлы в папке в ЗАГЛАВНЫЕ буквы? (если это возможно и в ее подпапках)
У меня есть этот код, но он конвертирует только файлы, а не папки.
@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
Нерекурсивное решение.
Я не знаю 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 )