こんにちは神乃木です。例によって阪急電車を作っております。
今日はテクスチャが同じで複数のファイル名にコピーするスクリプトを作ったので紹介します。
このスクリプトを利用することで、同じテクスチャだけどファイル名だけ異なるファイルを何種類も作らなきゃいけないとき、毎度コピーしたりリネームする手間から解放されます。
何をするスクリプトなのか
どういう動作をするかというとこういう動作です。
見ての通り、baseという名前を指定し、その後var1,var2,var3とカンマで区切って名前を指定すると、baseの中で存在するメインのa/c/d/i/n/s/r/pファイルをvar1,var2,var3とリネームしてコピーします。
このため、例えば同じテクスチャを利用している鉄道車両の6種類の車体のテクスチャをコピーするとき、毎回コピー&ペーストしてリネームをする作業がなくなります。
使い方
- 下のzipファイルをダウンロードするか、本文下にあるスクリプトをコピーし、.vbsで保存します。
テクスチャをコピーするスクリプト(ZIP形式→vbs形式) - .vbsファイルをbaseにしたいテクスチャがあるフォルダに移動させます(importフォルダでも可)。
- .vbsをダブルクリックして実行します。「Base file name」にはベースにしたいファイル名を、「Output file name list」には、コピー先のファイル名を入力します。拡張子は不要です。
- 作業はは一瞬で終わります。
この画面が表示されたら完了です。「はい」を押すと同じコピー操作をもう一度行いますので、必要に応じてこの画面のままスクリプトを放置しておき、アップデートが必要になった場合にOKを押すという使い方ができます。
注意
- a/d/s/i/n/c/r/p ファイルに対応。
- .pngファイルにだけ対応しています。jpgなどは対応してません。
- ソースファイルに存在しないタイプのマップはコピーされません(当然)
- うちの環境では動きましたが動作保証はありません。
スクリプト本文
VBスクリプトには慣れてないので適当でごめんなさい。
Dim Source Dim Source Dim Target Sub Init() Source = InputBox("Base file name (cf. Tc221_d/s/i.png-> Tc221)") Target = InputBox("Output file name list (comma to split) (cf. Mc221,M221,M220)") Dim rc rc = MsgBox("Copy texture files (a/d/s/i/n/c/r/p + LOD) in " & vbCrLf & Source & " to " & Target, 4, "Confirm") IF (rc = vbYes) and (Source <> "") and (Target <> "") then SplitAndCopy Source,Target ELSE WScript.Quit END IF End Sub Sub SplitAndCopy(Source,Target) Dim arTarget Dim baseFileName Dim FSO arTarget = Split(Target, ",") Set FSO = WScript.CreateObject("Scripting.FileSystemObject") ' file name loop For Each baseName In arTarget Dim currentSourceFileName Dim currentTargetFileName Dim variations variations = Array("_a.png","_c.png","_d.png","_i.png","_n.png","_s.png","_r.png","_p.png","_lod_a.png","_lod_c.png","_lod_d.png","_lod_i.png","_lod_n.png","_lod_s.png","_lod_r.png","_lod_p.png") For Each variation In variations currentSourceFileName = Source & variation currentTargetFileName = baseName & variation IF FSO.FileExists(currentSourceFileName) then FSO.CopyFile currentSourceFileName,currentTargetFileName END IF Next Next Dim rc rc = MsgBox("Finished! Do you want to copy again?" & vbCrLf & "(Useful for updating base textures)", 4, "Confirm") IF (rc = vbYes) and (Source <> "") and (Target <> "") then SplitAndCopy Source,Target ELSE WScript.Quit END IF End Sub Init() |
コメントを残す