
TechNet コラムへようこそ。このコラムでは、よく寄せられるシステム管理スクリプトに関する質問に Scripting Guys がお答えします。システム管理スクリプトについて質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。
詳細情報
| • | |
| • | |
| • |
![]()
Scripting Guy さん、よろしくお願いします。5 つのテキスト ボックスを配置した HTA があります。これらのテキスト ボックスの値をタブ区切り形式のファイルとして保存する方法はありますか。
-- EL

EL さん、こんにちは。旅行の日程表によると、Scripting Guys は、11 月 9 日金曜日の 8:00 AM ごろパリに到着する予定です。そうですね。厳密には、パリとバルセロナは違いますね。Scripting Guys は、バルセロナと TechEd IT Forum に向かう予定でした。しかし、渡航費用を抑えるため、途中でパリに立ち寄らなければなりませんでした。また、Scripting Guy の Jean Ross はパリに行ったことがないため、バルセロナに向かう前にパリで観光をすることにしました。
そのため、今日の Scripting Guys の予定はというと、ホテルにチェックインした後、1 日市内を観光することになっています。ノートルダム寺院、ルーブル美術館、そして忘れてはならないのがエッフェル塔です。
注 : もちろん、Scripting Guy の Jean Ross が、パパラッチや熱狂的なファンの大群を潜り抜けられればという前提がありますが。 いえ。Scripting Guy の Greg Stemp が、同じ問題に遭遇することはないでしょう。少なくとも、彼がパリを訪れるのは、これが初めてではありませんから。 |
Scripting Guys は、エッフェル塔に愛着を持っています。何しろ、エッフェル塔は、建立されるやいなや目障りなものだと見なされ、憤慨した市民から取り壊すべきだと抗議を受けましたから。言い伝えによると、小説家のギ ド モーパッサンは、毎日エッフェル塔のレストランでランチを食べていたそうです。その理由を尋ねると、「パリでエッフェル塔が視界に入ることなく食事をできるレストランは、ここだけだから」と答えたそうです。
現在、エッフェル塔はパリのシンボル的な存在で、世界中で最も有名で愛されている建造物の 1 つです。
では、なぜ Scripting Guys は、この塔にこだわるのでしょうか。それは、エッフェル塔に関するエピソードが、Scripting Guys とスクリプト センターのエピソードと非常に似ているからです。Scripting Guys がスクリプト センターを開設するやいなや、スクリプト センターは目障りなものと見なされ、マイクロソフト社員から、閉鎖すべきだと抗議を受けました。もちろん、現在スクリプト センターは、最も愛・・・。いえ、なんでもありません。とにかく今も開設されていますよね。
ちなみに、エッフェル塔は 18,038 ピースの鉄の部品が優に 2 億を超えるリベット (びょう) でとめられた状態で構成されています。これは、すばらしい作品です。しかし、正直なところ、HTA のテキスト ボックスの値をタブ区切り形式のファイルとして保存する次のスクリプトと比べたら、そうでもありません。
<html>
<head>
<title>Save as TSV File</title>
</head>
<SCRIPT Language="VBScript">
Sub SaveData
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists("C:\Scripts\Test.tsv") Then
Set objFile = objFSO.OpenTextFile("C:\Scripts\Test.tsv", 8)
strLine = UserName.Value & vbTab & Email.Value & vbTab & _
Title.Value & vbTab & Country.Value & vbTab & Product.Value
objFile.WriteLine strLine
objFile.Close
Else
Set objFile = objFSO.CreateTextFile("C:\Scripts\Test.tsv")
strLine = UserName.Value & vbTab & Email.Value & vbTab & _
Title.Value & vbTab & Country.Value & vbTab & Product.Value
objFile.WriteLine strLine
objFile.Close
End If
End Sub
</SCRIPT>
<body>
<input type="text" name="UserName" size="25"><p>
<input type="text" name="Email" size="25" ><p>
<input type="text" name="Title" size="25"><p>
<input type="text" name="Country" size="25"><p>
<input type="text" name="Product" size="25"><p>
<input type="button" value="Run Button" onClick="SaveData">
</body>
実は、これは見た目ほど複雑なスクリプトではありません。まず、HTA の <BODY> ですが、この部分は 5 つのテキスト ボックスと 1 つのボタンで構成されています。すべてのテキスト ボックスには、UserName などの一意な名前が付けられており、だまされていると思うかもしれませんが、各テキスト ボックスの size 属性では 25 文字が指定されています (これは単にテキスト ボックスの幅を設定するためのもので、テキスト ボックスに入力できる文字数とは関係ありません)。たとえば、UserName テキスト ボックスのタグは次のようになっています。
<input type="text" name="UserName" size="25"><p>
ボタンも同様にシンプルです。value 属性 (ラベル) には、Run Button という文字列が設定され、このボタンは、onClick イベントに応答するように構成されています。
<input type="button" value="Run Button" onClick="SaveData">
ご覧のとおり、このボタンがクリックされるたびに、SaveData サブルーチンが実行されます。
奇遇ですね。この SaveData サブルーチンについて、ちょうど説明しようと思っていたところです。このサブルーチンでは、まず Scripting.FileSystemObject のインスタンスを作成します。これは、テキスト ファイルへの書き込み処理を行うのに必要なオブジェクトです。このオブジェクトを作成したら、FileExists メソッドを使用して、C:\Scrips\Test.tsv ファイルが既に存在しているかどうかを確認します。
If objFSO.FileExists("C:\Scripts\Test.tsv") Then
なぜわざわざこのような処理を行うのでしょうか。このファイルが既に存在している場合は、単に既存のファイルの末尾に新しいデータを追加し、このファイルが存在しない場合は、ファイルを作成してからデータをファイルに追加する必要があるからです。多くの方にはお馴染みのことだと思いますが、FileSystemObject は、ちょっと変わったオブジェクトです。FileSystemObject オブジェクトを使用してテキスト ファイルを開く方法について注意を払わないと、思わぬ結果を招くことがあります。システム管理者であれば、思わぬ結果を招くことは好みません。ですから、Test.tsv ファイルが存在しているかどうかを確認してから、適切な一連の操作を行っています。
では、Test.tsv ファイルが存在するとしましょう。この場合は、次のコード行を使用して、書き込み用にファイルを開きます (2 つ目のパラメータ 8 は、ファイルを書き込み用に開くことを指定する数値です)。
Set objFile = objFSO.OpenTextFile("C:\Scripts\Test.tsv", 8)
ファイルを開いたら、次のコード行を使用して、ファイルに追加するデータ行を作成します。
strLine = UserName.Value & vbTab & Email.Value & vbTab & _
Title.Value & vbTab & Country.Value & vbTab & Product.Value
ここでは、単に 5 つのテキスト ボックスの Value 属性の値を連結し、各テキスト ボックスの値をタブ文字で区切っているだけです (vbTab はタブ文字を表す VBScript の定数です)。ここでは、それほど変わったことはしていません。UserName テキスト ボックスの Value 属性の値を取得し、この値の末尾にタブ文字を追加して、その後、Email テキスト ボックスの Value 属性の値を取得し、この値の末尾にタブ文字を追加しています。これ以降の処理については、ご自分で解読できますよね。この処理が完了すると、strLine 変数には、次のような値が格納されます。
Kenmyer kmyer@fabrikam.cim Manager US X492
その後、WriteLine メソッドを呼び出して、この値をテキスト ファイルに追加します。そして、Close メソッドを呼び出して、テキスト ファイルを閉じます。
Test.tsv ファイルが存在しない場合の処理も同じような感じです。大きな違いは、ファイルが存在しない場合は、値を追加するファイルを開かないことです (それは、ファイルが存在しないからです)。代わりに、CreateTextFile メソッドを呼び出して、Test.tsv ファイルを作成します。
Set objFile = objFSO.CreateTextFile("C:\Scripts\Test.tsv")
この処理が完了したら、ファイルに追加するデータ行を作成し、WriteLine メソッドを使用して作成したデータ行をファイルに追加し、Close メソッドを呼び出してファイルを閉じます。これで完了です。
Scripting Guys はというと、皆さんがオフィスで座って、冷めたコーヒーを飲み、仕事をしている振りをしている間、幸運にもクレープを食べ、ルーブル美術館に向かっていました。何ですって。本当ですか。あのモナ リザがルーブル美術館に展示されているんですか。いやあ、これは驚きました。正直なところ、私たちは、ルーブル美術館に長居をするつもりはありませんでした。今日のコラムを渡して、館長にコラムを展示する許可を与えたら、ノートルダム寺院に向かおうと思っていました。でも、ルーブル美術館では、Scripting Guys のスクリプト以外にどんなものが展示されているのかを見た方がよいかもしれませんね。きっと楽しいでしょうから。
その後の予定は、バルセロナです。
でも、エッフェル塔に立ち寄った後です。あと、ベルサイユ宮殿もです。ベルサイユ宮殿にもぜひ行きたいですね。それと、あといくつかクレープを食べてからです。やっぱり、いくつかじゃなくて、たくさん食べてからです。しかし、じきにバルセロナに向かいます。ではまた月曜日。