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