如何将目录中的所有文件和文件夹都变为大写?

如何将目录中的所有文件和文件夹都变为大写?

如何将文件夹中的所有文件夹和文件重命名为大写?(如果其子文件夹也可以)

我有此代码,但它只转换文件,而不是文件夹。

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

相关内容