[vbs]読込むファイルの文字列置換とファイル書き込みのサンプル | 七隈達磨のブログ

七隈達磨のブログ

パソコンを使ってて気になった事の解決法や色んな備忘録。
間違ってたら教えてください。
あくまで個人レベルなので参考程度に。実施して何か起きても責任は取れません(笑)

'変数の宣言漏れを防ぐために明示的に変数を宣言する事を記述する
Option Explicit

'変数を宣言する
Dim objFileSys
Dim strScriptPath
Dim strOpenFile
Dim strWriteFile
Dim objTextStream
Dim objWriteStream
Dim strText
Dim strText2
Dim icnt

'--------------------------------------
' Scripting.FileSystemObjectオブジェクトを作成する。
'--------------------------------------
Set objFileSys = CreateObject("Scripting.FileSystemObject")

'--------------------------------------
' 置換する文字列は「ファイルのフルパスを取得」
' 検索する文字列は「ファイル名」
' 置換する文字列は「""(空)」で上書きする事でドライブ名から\までのカレントパスを取得する
'--------------------------------------
strScriptPath = Replace(WScript.ScriptFullName,WScript.ScriptName,"")

'--------------------------------------
' ドライブ名から\までと作成したいファイル名「TestData.txt」の2つのパス情報を
' 繋げて1つのパス情報を作成する
'--------------------------------------
strOpenFile = objFileSys.BuildPath(strScriptPath,"reg_query_DisplayName.txt")
strWriteFile = objFileSys.BuildPath(strScriptPath,"reg_query_DisplayName_mod.txt")

'--------------------------------------
' objTextStreamは読込むファイル
' objWriteStreamは書き込むファイル
' 引数1:ファイル名
' 引数2:1は読込専用、2は上書き
' 引数3:Trueはファイルがなければ作成する
'--------------------------------------
Set objTextStream = objFileSys.OpenTextFile(strOpenFile, 1)
Set objWriteStream = objFileSys.OpenTextFile(strWriteFile, 2, True)

'--------------------------------------
' 行数をカウントするためのicntの初期化
'--------------------------------------
icnt = 1

'--------------------------------------
' 読み込み処理全体をDo Until~Loopの繰り返しで作成しました。
' 繰り返し終了(=読み込み終了)の条件は、AtEndOfStreamプロパティがTrueになったときです。
'--------------------------------------
Do Until objTextStream.AtEndOfStream = True

'--------------------------------------
' ファイルを1行ずつ読込む
'--------------------------------------
strText = objTextStream.ReadLine

'--------------------------------------
' 引数1の文字列内にある引数2の文字列を引数3で置換する
'--------------------------------------
strText2 = Replace(strText," DisplayName REG_SZ ","")

'--------------------------------------
' 行数で処理を変える
' objWriteStream.WriteLineだと最終行に改行されるため
' objWriteStream.Write(書込みの際に改行無し)を利用する。
' 2行目以降は書込む際に事前に改行を入れる。
'--------------------------------------
If icnt = 1 Then

'--------------------------------------
' 置換した文字列をファイルに書き込む
'--------------------------------------
objWriteStream.Write strText2

Else

'--------------------------------------
' 置換した文字列の前に改行を入れファイルに書き込む
'--------------------------------------
objWriteStream.Write vbCrLf & strText2

End If

'--------------------------------------
' icntのインクリメント(行数のカウント)
'--------------------------------------
icnt = icnt + 1

Loop

'--------------------------------------
'テキストファイルを閉じます。
'--------------------------------------
objTextStream.Close
objWriteStream.Close

'--------------------------------------
'変数を空にする
'--------------------------------------
Set objTextStream = Nothing
Set objWriteStream = Nothing
Set objFileSys = Nothing
Set icnt = Nothing


※参考サイト
■VBScriptとWSHを使おう
http://www.happy2-island.com/vbs/cafe02/
■VBScriptで改行コードを変換する!
http://www.ilovex.co.jp/Division/ITD/archives/2008/10/vbscript.html