自分のためのTips、誰かの為にもなるといいな・・・

WSHサンプル集


Rev.4を表示中。最新版はこちら

以下、上から組み合わせて、使うこと。

基本テンプレート

拡張子wsfのファイルを作成する。
<job id="JOBID">
<script language="JScript">

</script>
</job>
ファイルシステムオブジェクトを生成する。
var fs = new ActiveXObject("Scripting.FileSystemObject");
スクリプトファイルのディレクトリを取得
// スクリプトファイルのディレクトリ
var dir = fs.GetParentFolderName(WSH.ScriptFullName);
フォルダ名とファイル名からパスを組み立てる
必要な場合のみ、パス区切り文字が付けられるので、自分で "\" を入れるより、こちらを使うこと。
var path_in = fs.BuildPath(dir, "input.txt");
var path_out = fs.BuildPath(dir, "output.txt");

テキストファイルの読み書き

ファイルの文字コードは、基本的にASCII(Shift_JIS)になり、Unicodeを指定すると、UTF-16になるようだ。

読み込み

var fin = fs.OpenTextFile(path_in);

while (!fin.AtEndOfStream) {
	var s = fin.ReadLine();
}

fin.Close();
読み込みメソッド
var s;

// 文字数指定
s = fin.Read(6);	// 読み込み
fin.Skip(2);		// 読み飛ばし

// 一行
s = fin.ReadLine();	// 読み込み
fin.SkipLine();		// 読み飛ばし

// 一括読み込み
s = fin.ReadAll();

書き込み

ファイルを新規作成して、書き込む場合
既存ファイルがある場合、デフォルトでは、上書きしない(下の例では、上書きを指定)
var fs = new ActiveXObject("Scripting.FileSystemObject");

// 引数 (path[, true:overwrite[, true:unicode])
var fout = fs.CreateTextFile(path_out, true);

fout.WriteLine("Hello, WSH!");

fout.Close();

既存ファイルへの上書き書き込みの場合
ファイルが無い場合、デフォルトでは新規作成しない(下の例では、作成を指定)

var fs = new ActiveXObject("Scripting.FileSystemObject");

var ForReading = 1, ForWriting= 2, ForAppending = 8;

// 引数 (path, io_mode, create)
var fout = fs.OpenTextFile(path_out, ForWriting, true);

fout.WriteLine("Hello, WSH!");

fout.Close();

CreateTextFileを使用するか、OpenTextFileを使用するかは、以下の場合を除き、どちらでも良さそう。

  • 追加書き込みしたい → OpenTextFile の第2引数に ForAppending を指定
  • ファイルが無ければ、新規作成したい → CreateTextFile で第2引数に false を指定(省略可)
  • ファイルが無ければ、新規作成したくない → OpenTexFile の第3引数に false を指定(省略可)
書き込みメソッド
fout.WriteLine("Hello");	// 改行付き
fout.Write("World!");		// 改行なし
fout.WriteBlankLines(2);	// 改行を2つ

CSVファイルの読み込み

以下のような、CSVファイル(address.csv)を読み込む場合

name,age,address
"田中",20,"大阪府"
"鈴木",24,"東京都"
"佐藤",22,"北海道"

ADOを使用する。テーブル名にファイル名を("."を"#"にして)指定して、SQL文を実行できる。

var csv_dir = "C:\\csv";
var con = new ActiveXObject("ADODB.Connection");

con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;"
	+ "Data Source=" + csv_dir + ";"
	+ "Extended Properties=\"text;HDR=YES;FMT=Delimited;\";";

con.Open();

// CSVファイルから、SQLでクエリ
var rs = con.Execute("select * from address#csv order by age");

while (!rs.EOF) {
	var name = rs.Fields("name");
	var age = rs.Fields("age");

	rs.MoveNext();
}

rs.Close();
con.Close();
CSVファイルの一行目にヘッダが無い場合、接続文字列で、"HDR=NO" を指定する。
var csv_dir = "C:\\csv";
var con = new ActiveXObject("ADODB.Connection");

con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;"
	+ "Data Source=" + csv_dir + ";"
	+ "Extended Properties=\"text;HDR=NO;FMT=Delimited;\";";

con.Open();

// CSVファイルから、SQLでクエリ
var rs = con.Execute("select * from address#csv");

while (!rs.EOF) {
	var name = rs.Fields(0);
	var age = rs.Fields(1);

	rs.MoveNext();
}

rs.Close();
con.Close();
他のSQLを実行したところ、INSERTを使用できたが、UPDATEとDELETEは、使用できなかった。
CSVファイルのあるディレクトリに、以下のようなファイルを用意すると、ヘッダが無くても列名を定義できる。
Schema.ini
[address.csv]
ColNameHeader=False
Format=CSVDelimited
CharacterSet=OEM
Col1=name Text
Col2=age Byte
Col3=address Text

最終更新 2008/09/15 02:37:02 - yohei
(2008/09/14 05:43:30 作成)


検索

最近気になる言葉
LINQ
atコマンド
最近更新したページ
2015/7/16
2008/9/15
2008/1/30
2007/12/14
2007/11/14
2007/10/25
2007/9/23
2007/5/30