如何將目錄中的所有檔案和資料夾設為大寫?

如何將目錄中的所有檔案和資料夾設為大寫?

如何將資料夾中的所有資料夾和檔案重新命名為大寫? (如果它的子資料夾也可以)

我有這段程式碼,但它只轉換文件,而不轉換資料夾。

@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 )

相關內容