VBScript でテキストファイルを読み込む・書き出す
「FileSystemObject」というものを使うと、テキストファイルの読み書きができる。
以下のようなスクリプトを fso.vbs
などという名前で保存。inputText.txt
はスクリプトと同じフォルダに置いておく。
今回は特に文字列置換などはせず、inputText.txt
の中身を1行ずつ読み込んで、outputText.txt
というファイルを作って書き出すだけ。ファイルごとコピーしたときと結果は同じ状態だけど、テキストファイルの読み書きの基礎として…。
Dim fso
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
' 読み込みファイルの指定 (相対パスなのでこのスクリプトと同じフォルダに置いておくこと)
Dim inputFile
Set inputFile = fso.OpenTextFile("inputText.txt", 1, False, 0)
' 書き出しファイルの指定 (今回は新規作成する)
Dim outputFile
Set outputFile = fso.OpenTextFile("outputText.txt", 2, True)
' 読み込みファイルから1行ずつ読み込み、書き出しファイルに書き出すのを最終行まで繰り返す
Do Until inputFile.AtEndOfStream
Dim lineStr
lineStr = inputFile.ReadLine
outputFile.WriteLine lineStr
Loop
' バッファを Flush してファイルを閉じる
inputFile.Close
outputFile.Close
VBA から覚えたタチなので変数宣言を必ずしている。Option Explicit
と書かなければ、Dim
で変数宣言をしなくても動くっちゃ動く。あんまりよく調べてないまま書いてるけど、よく調べずに書いても何となく使えるのがスクリプト言語 (WSH) の良いところ。
Scripting.FileSystemObject#OpenTextFile()
の引数は以下のとおり。
- 第1引数 : 読み込む・もしくは書き出すファイル名。相対パスか絶対パス。必須な引数は第1引数のみ。
- 第2引数 : 読み書きのモード。
1
(読み込み)、2
(書き込み)、8
(追加書き込み) の3つ。初期値は1
(読み込み)。実際に使うときは定数を用意しておくとよい。 - 第3引数 : ファイルがなかった時に新規作成するかどうか。初期値は
False
(ファイルがなくても新規作成しない)。 - 第4引数 : 文字コードの指定。初期値は
0
(ASCII)。UTF-16 なら-1
、システムのデフォルトエンコードなら-2
。UTF-8 の読み書きはできない。
第4引数の文字コードのことが書きたかった。そう、FileSystemObject では UTF-8 の読み書きができないのだ。つまり、inputText.txt
のエンコードは ANSI などである必要がある。UTF-8 の読み書きの方法は別途紹介。
参考
- Windows管理者のためのWindows Script Host入門 : 第10回 WSHスクリプトからのファイル操作(1) (1/3) - @IT
- AtEndOfStream プロパティ (Windows Script Host)
- AtEndOfStream プロパティ (FileSystemObject)
今回のコードを JScript で書き直したバージョンは以下。