同じコマンドを、パラメータを変えながら大量に打つ必要がある場合。
単純なものならテキストエディタでちょいちょいするだけで事足りるんですが複雑になるととたんに面倒になるのでコマンドジェネレーター作りました。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
と出力されるわけです。
あとはこれをコピってコンソールに貼り付けるなりバッチにするなりで実行するわけですね。

0 件のコメント:
コメントを投稿