ファイル名変換スクリプト

ちょこっと仕事で作業しているときにかったるくなったので
ファイル名置換を一気にしてくれるツールを作成してみた。
というより、ファイル名変更が必要ないようにした方がいいのかも
しれないけど、そうすると色々と面倒ごとがあるのでツールの作成を選びました。

といっても手作業が完全排除できないところが悲しい。
ツールについてはjsというのも考えたけど、諸般の事情でVBSに
したった。ちなみにinitPathのところをネットワークパスにすると
ネットワークの共有フォルダもフォルダ選択できたんでびっくり

しょせんへっぽこなのでネットの切り貼りです。
いまだに再帰処理がうまくかけませぬ。
コレぐらいさくっと作れればいいけどなぁ。結局テスト込みで
3時間かかってるよトホホ


Option Explicit

Option Explicit

Dim objShell
Dim wsh
Dim initPath

'フォルダ指定
initPath = "C:"

Dim targetFolder
Set objShell = WScript.CreateObject("Shell.Application")
If Err.Number = 0 Then
    Set objFolder = objShell.BrowseForFolder(0, "対象フォルダの選択", 16, initPath)
    If Not objFolder Is Nothing Then
        targetFolder = objFolder.Items.Item.Path
    else
        WScript.Quit
    End If
Else
    WScript.Echo "エラー:" & Err.Description
End If

Dim objFileSys, objFolder, objFile
Set objFileSys = WScript.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFileSys.GetFolder(targetFolder)

Dim targetStr, replaceStr
targetStr = InputBox("置換対象文字を入力してください。", "置換対象")
replaceStr = InputBox("置換後の文字を入力してください。", "置換文字列")

Dim r
r = 0
r = ShowSubFolders(objFolder, targetStr, replaceStr)
WScript.Echo "変換処理終了  処理件数:" & r & "件"

'  ファイル名置換用処理
Function ShowSubFolders(ByVal Folder, ByVal targetStr, ByVal replaceStr)
    Dim i
    Dim File, Subfolder
    For Each File In Folder.Files
    If InStr(1, File.Name, targetStr) Then
        File.Name = Replace(File.Name, targetStr, replaceStr)
        i = i + 1
        With Err
              Select Case .Number
                Case 5, 52
                  WScript.Echo "ファイル名に使えない文字が指定されたので中断します。"
                  Exit For
                Case 58
                  WScript.Echo objFile.Name & " は既に存在するためファイル名を変更できません。"
                  .Clear
                Case 0
                  'エラーが発生しなかった場合は何もしない
                Case Else
                  WScript.Echo .Description & .Number
                  .Clear
              End Select
        End With
    End If
    Next
    '再帰処理でサブフォルダも変換
    Dim r,s
    For Each Subfolder In Folder.SubFolders
        r = ShowSubFolders(Subfolder, targetStr, replaceStr)
 s = s + r
    Next
    ShowSubFolders = i + s
End Function

コメント

このブログの人気の投稿

証券外務員1種勉強(計算式暗記用メモ)

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

マクロ経済学(IS-LM分析)