innoSetupでインストーラーを作成する際に面倒な為、
フォルダを指定しているのですが、当然不要なフォルダーや
ファイルまでもがインストーラーに入ってしまいます。
別に動作には影響ないのですが、要らないものを配布するのも
気が引けるので、何とかします。
試していないのですが、innoSetupはインストーラを作成する
前後にプログラムを実行することが出来るっぽいので、
作戦としては、
・不要なものを除去しつつフォルダのコピー
・コピーしたフォルダを元にインストーラー作成
・コピーしたフォルダを削除
だと手間が省けそうな気がしてます。
で、表題の処理を行うスプリクトを作りました。
何で作るべきか悩みましたが、VBScriptにしました。
'必要なものでだけのフォルダーコピー call Main() sub Main() removeFolderNames = array(".vscode", "temp", "__pycache__") removeFileNames = array(".env") targetDir = "Fusion360_NEKONOTE\NEKONOTE" tempDir = getTempPath() 'copy Call copyFolder(targetDir, tempDir) 'get remove folder&file Dim removeLst Set removeLst = CreateObject("System.Collections.ArrayList") for idx = 0 to ubound(removeFolderNames) removeLst.AddRange(getFolderPaths(tempDir & "\NEKONOTE", removeFolderNames(idx))) next for idx = 0 to ubound(removeFileNames) removeLst.AddRange(getFilePaths(tempDir & "\NEKONOTE", removeFileNames(idx))) next 'remove folders call execRemove(removeLst) end sub sub execRemove(lst) On Error Resume Next for each path in lst path.Delete next end sub 'return ArrayList function getFilePaths(path, removeName) Set fso = CreateObject("Scripting.FileSystemObject") Set folder = fso.GetFolder(path) Dim stack Set stack = CreateObject("System.Collections.ArrayList") call stack.add(folder) dim lst Set lst = CreateObject("System.Collections.ArrayList") Do Until stack.Count = 0 set folder = stack.item(0) for each f in folder.Files if f.Name = removeName then lst.add(f) end if next for each sf in folder.SubFolders stack.add(sf) next stack.RemoveAt(0) loop set getFilePaths = lst end function 'return ArrayList function getFolderPaths(path, removeName) Set fso = CreateObject("Scripting.FileSystemObject") Set folder = fso.GetFolder(path) Dim stack Set stack = CreateObject("System.Collections.ArrayList") call stack.add(folder) dim lst Set lst = CreateObject("System.Collections.ArrayList") Do Until stack.Count = 0 set folder = stack.item(0) for each sf in folder.SubFolders if sf.Name = removeName then lst.add(sf) else stack.add(sf) end if next stack.RemoveAt(0) loop set getFolderPaths = lst end function sub copyFolder(targetDir, tempDir) Set fso = CreateObject("Scripting.FileSystemObject") Call fso.CopyFolder(targetDir, tempDir) end sub function getTempPath() Set fso = CreateObject("Scripting.FileSystemObject") getTempPath = fso.GetSpecialFolder(2).Path & "\" end function
正確には、フォルダを丸ごとコピーして、不要なファイル・フォルダ
をチマチマ削除してます。
アドイン完成しているのに、それ以外の部分で手間取っている。