디렉토리의 모든 파일과 폴더를 대문자로 만드는 방법은 무엇입니까?

디렉토리의 모든 파일과 폴더를 대문자로 만드는 방법은 무엇입니까?

폴더의 모든 폴더와 파일 이름을 어떻게 대문자로 바꾸나요? (하위 폴더에서도 가능한 경우)

이 코드가 있지만 폴더가 아닌 파일만 변환합니다.

@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이 설치되어 있는 경우 다음 스크립트를 사용할 수 있습니다(모든 OS에서 작동해야 함).

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이름을 바꾸려는 파일이 있는 디렉터리에서 실행하면 됩니다.


업데이트: 재귀 솔루션.

죄송합니다. 재귀적 솔루션을 원하신다는 것을 방금 깨달았습니다.

다음 스크립트는 하위 디렉터리 트리를 탐색하면서 이름을 바꿀 파일과 하위 디렉터리를 스택에 기록합니다. 그런 다음 스택에서 파일/하위 디렉터리를 하나씩 팝하고 업케이스합니다.

(순회 도중 디렉터리 이름을 바꾸지 않으려면 2단계 솔루션이 가장 좋습니다. 모든 작업을 한 번에 수행하려고 하면 오류가 발생하기 쉽고 취약해질 수 있습니다.)

또한 스크립트를 실수로 실행할 경우를 대비해 변경 사항을 기록해 두는 것이 가장 좋습니다. 이 스크립트는 모든 이름 변경을 .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 )

관련 정보