[VBS] コマンドジェネレーター

2014年7月26日土曜日

Windows その他IT

t f B! P L

同じコマンドを、パラメータを変えながら大量に打つ必要がある場合。
単純なものならテキストエディタでちょいちょいするだけで事足りるんですが複雑になるととたんに面倒になるのでコマンドジェネレーター作りました。vbsです。

'command generator

Option Explicit

Dim commandStrings
Dim inputCsv
Dim outputFile

'生成するコマンドのフォーマット。$$数値$$が置換対象になります。0スタート
commandStrings = "echo -hoge $$0$$ -foo $$1$$ -bar $$0$$.txt"

'入力値になるタブ区切りのテキストファイル
inputCsv = "c:\users\hoge\desktop\bat\input.csv"

'コマンドが出力されるファイル
outputFile = "c:\users\hoge\desktop\bat\output.txt"

'====================================================================

Dim objRegex
Set objRegex = CreateObject("VBScript.RegExp")
objRegex.Pattern = "^\s*$"

Dim objFileSys
Set objFileSys = CreateObject("Scripting.FileSystemObject")

Dim objReadStream
Dim objWriteStream
Set objReadStream = objFileSys.OpenTextFile(inputCsv, 1)
Set objWriteStream = objFileSys.OpenTextFile(outputFile, 2, True)

Dim strLine
Dim i
Dim aryItems
Dim replacedStr
Do Until objReadStream.AtEndOfStream = True
    strLine = objReadStream.ReadLine
    If objRegex.Test(strLine) = False Then
        replacedStr = commandStrings
        aryItems = Split(strLine, " ")
        For i = 0 to UBound(aryItems)
            replacedStr = Replace(replacedStr, "$$" & i & "$$", aryItems(i))
        Next
        objWriteStream.WriteLine replacedStr
    End If
Loop

objReadStream.Close
objWriteStream.Close

40行目のダブルクォーテーションの中はスペースではなくタブです。 コピペで上手くいかない場合はタブを手打ちしてください。 もしくは、そこが区切り文字を意味している部分なので、パラメータ値に含まれさえしなければ任意の文字に変えて大丈夫です。 (当然入力ファイルの区切りもそれにあわせてください)
適当な名前で拡張子.vbsで保存してダブルクリックすればOKです。
例えば上記の例のまま実行すると、入力値のファイルの中身が
aaa[タブ]bbb
ccc[タブ]ddd
だった場合、出力ファイルには
echo -hoge aaa -foo bbb -bar aaa.txt
echo -hoge ccc -foo ddd -bar ccc.txt
と出力されるわけです。
あとはこれをコピってコンソールに貼り付けるなりバッチにするなりで実行するわけですね。

QooQ