フォルダ内のすべてのフォルダとファイルの名前を大文字に変更するにはどうすればよいですか? (サブフォルダでも可能であれば)
このコードはありますが、フォルダーではなくファイルのみが変換されます。
@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
名前を変更したいファイルがあるディレクトリで実行するだけです。
更新: 再帰的なソリューション。
申し訳ありませんが、再帰的なソリューションが求められていることに気付きました。
次のスクリプトはサブディレクトリ ツリーをたどり、名前を変更するファイルとサブディレクトリをスタックに記録します。次に、スタックからファイル/サブディレクトリを 1 つずつポップし、大文字に変換します。
(トラバーサルの途中でディレクトリの名前を変更するのを避けるには、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 )