特定のフォルダ以下全てのフォルダについて、全角の()を半角に置換するコードを書き、希望通りの動きが出来たのですが、何故うまくいっているのか分からない部分があり質問を投稿しました。
VBscript
1Option Explicit 2Dim FSO,fs,fn, f,foldername,subfolder 3Set FSO = CreateObject("Scripting.FileSystemObject") 4'カレントディレクトリを引数として関数呼び出し 5RenameFolder FSO.GetFolder(FSO.GetParentFolderName(WScript.ScriptFullName)) 6 7sub RenameFolder(Folder) 8 For Each f In Folder.subfolders 9 '再帰用にサブフォルダのオブジェクト作成 10 Set fs = WScript.CreateObject("Scripting.FileSystemObject") 11 Set fn = fs.GetFolder(f) 12 foldername = f.Name 13 Dim rename 14 rename = foldername 15 rename = Replace(rename,"(","(") 16 rename = Replace(rename,")",")") 17 'renameに変更が加えられた時 18 if foldername <> rename then 19 f.Name = rename 20 End if 21 '下層フォルダを再帰呼び出し 22 RenameFolder fn 23 Next 24 set fs = Nothing 25 set fn = Nothing 26 Set FSO = Nothing 27end sub
ファイル階層
├─test
│ ├─2011114(a)
│ ├─20115
│ └─済2xxxx1116(a)
│ └─10223402()
└─test2
├─2011203423(a)
└─済201111116(a)
「'下層フォルダを再帰呼び出し」の部分で、fnを引数として再帰的に「RenameFolder」を呼び出し、下位ディレクトリのサブフォルダを調べようとしたのですが、これだとサブフォルダが無いフォルダ(例えば2011114(a))がfnに格納されたとき、
For Each f In Folder.subfolders
のFolder.subfolders部分がnullになりエラーが出るかと思っていたのですが、エラーが出ずに処理が続きました。
また、そもそもフォルダがないフォルダでこのコードを実行したのですが、特にエラーは出ませんでした。
これはVBSの仕様なのでしょうか?それとも、別の行でエラーを回避しているのでしょうか。
コードは出来ましたが、すっきりしないのでどなたかご回答いただけますと幸いです。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/09 11:15