如何将文件夹中的所有文件夹和文件重命名为大写?(如果其子文件夹也可以)
我有此代码,但它只转换文件,而不是文件夹。
@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 )