コスパ重視で生きたい人生だった

なるべく楽して生きて行きたい30代サラリーマンのブログ

置換ルールに従って、元ファイルから置換後ファイルを自動で作るbatファイル(コマンドプロンプト)


元のファイルがあって、一部のテキストを置換→新ファイル作成、という作業あると思います。
そして、置換後の文字列ごとに別のファイル名で保存したいこと、あると思います。
ぼくはありました。

というわけで、vbsでスクリプトを作成。
今流行のrubyとか、サンプル豊富なperlとか、いろいろな言語で簡単にできる処理だとは思うけれど、Windows標準環境で動くって嬉しい。vbs。


Windows DOS/コマンドプロンプト辞典

Windows DOS/コマンドプロンプト辞典

●置換スクリプトツールの動作概要

元ファイル

任意のテキストファイル

置換ルールファイル

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.Close

Loop


msgbox "完了"

●改善の余地がありそうなポイント

エラー処理がまったく入っていないので、いれたほうがよさげ
置換対象は1組のみだけど、2組以上もcsvのカラムを増やせば対応できるのかな?
ネットワークドライブには未対応なので、環境によってはてこ入れ必要


そんな感じ。
とりあえず、我ながらかなり便利であった。
そんじゃまた。