置換ルールに従って、元ファイルから置換後ファイルを自動で作るbatファイル(コマンドプロンプト)
元のファイルがあって、一部のテキストを置換→新ファイル作成、という作業あると思います。
そして、置換後の文字列ごとに別のファイル名で保存したいこと、あると思います。
ぼくはありました。
というわけで、vbsでスクリプトを作成。
今流行のrubyとか、サンプル豊富なperlとか、いろいろな言語で簡単にできる処理だとは思うけれど、Windows標準環境で動くって嬉しい。vbs。
- 作者: 飯島弘文
- 出版社/メーカー: 翔泳社
- 発売日: 2003/08/23
- メディア: 単行本(ソフトカバー)
- 購入: 3人 クリック: 100回
- この商品を含むブログ (16件) を見る
●置換スクリプトツールの動作概要
元ファイル
任意のテキストファイル
置換ルールファイル
csv形式(”,”区切りの3カラム)
(1)置換対象文字列,(2)置換後文字列,(3)ファイル名
出力ファイル
元ファイルのテキストを文字列置換したもの。(1)→(2)
ファイル名:(3)ファイル名.txt
●操作方法
下のコードをテキストファイルに貼り付け、拡張子.vbsで保存。
保存したファイルをダブルクリックで起動。
「置換元ファイル名を入力してください」と出るので、ファイル名をフルパスで入力。(.vbsのファイルと同じフォルダにあるなら、ファイル名だけでOK)
「置換規則ファイル名を入力してください」と出るので、ファイル名をフルパスで入力。(.vbsのファイルと同じフォルダにあるなら、ファイル名だけでOK)
.vbsファイルと同じ階層に、置換ルールに記し多分だけファイルができる。
「完了」と表示されれば終わり。
●コード
Dim objFile ' 対象ファイル
Dim oldText ' 置換前テキスト
Dim objFSO ' ファイルシステムオブジェクト
Dim strText ' 置換リストの一行
Dim aryTextList ' 置換リスト1行の配列
Dim oldIPaddr ' 置換前のIPaddr
Dim newIPaddr ' 置換後のIPaddr
Dim newFileName ' 新しい置換後新規保存のファイル名
Dim MyFile ' 置換後ファイル
Dim afterFile ' 出力ファイル名(拡張子付与後)
Dim inputFile '置換元ファイル
Dim listFile '置換規則ファイルinputFile = InputBox("置換元ファイル名を入力してください。")
listFile = InputBox("置換規則ファイル名を入力してください。")
' 元ファイル読み込み
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(inputFile)' リストファイル読み込み
Set objLIST = CreateObject("Scripting.FileSystemObject")
Set objLISTFile = objLIST.OpenTextFile(listFile)
' 書き込みファイル作成
Set newFSO = CreateObject("Scripting.FileSystemObject")
' 置換ループ開始
Do Until objLISTFile.AtEndOfLine = true' リストファイルから一行ずつ読み込み
strText = objLISTFile.ReadLine
aryTextList = Split(strText,",")
oldIPaddr = aryTextList(0)
newIPaddr = aryTextList(1)
newFileName = aryTextList(2)' 出力ファイル名
afterFile = newFileName & ".txt"' テキストデータ読込
Set objFile = objFSO.OpenTextFile(inputFile)
oldText = objFile.ReadAll
' テキスト変換
newFSO = Replace(oldText,oldIPaddr,newIPaddr)objFile.Close
' 書き込み
Set MyFile = objFSO.CreateTextFile(afterFile)
MyFile.WriteLine (newFSO)
MyFile.CloseLoop
msgbox "完了"
●改善の余地がありそうなポイント
エラー処理がまったく入っていないので、いれたほうがよさげ
置換対象は1組のみだけど、2組以上もcsvのカラムを増やせば対応できるのかな?
ネットワークドライブには未対応なので、環境によってはてこ入れ必要
そんな感じ。
とりあえず、我ながらかなり便利であった。
そんじゃまた。