如何將資料夾中的所有資料夾和檔案重新命名為大寫? (如果它的子資料夾也可以)
我有這段程式碼,但它只轉換文件,而不轉換資料夾。
@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 )