Hey, Scripting Guy!

TechNet コラムへようこそ。このコラムでは、よく寄せられるシステム管理スクリプトに関する質問に Scripting Guys がお答えします。システム管理スクリプトについて質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。

今日の質問 : ファイルを選択するためのダイアログ ボックスを表示する方法はありますか


ファイルを選択するためのダイアログ ボックスを表示する方法はありますか

Q

Hey, Scripting Guy! スクリプトを使用して、ダイアログ ボックスを表示し、ユーザーにファイルを選択するよう求める方法はありますか。

-- BF

A

BF さん、こんにちは。BF さんが Windows 2000 を使用している場合は、私の知る限り、そのような処理を実行する方法はありません。少なくとも、Windows 2000 にはそのような機能は組み込まれていません。しかし、Windows XP を使用している場合は別です。Windows XP では、UserAccounts.CommonDialog オブジェクトを使用して標準の [ファイルを開く] ダイアログ ボックスを表示することができます。この処理を行うスクリプトは次のようになります。

Visual Basic
Set objDialog = CreateObject("UserAccounts.CommonDialog")

objDialog.Filter = "All Files|*.*"
objDialog.InitialDir = "C:\"
intResult = objDialog.ShowOpen
 
If intResult = 0 Then
    Wscript.Quit
Else
    Wscript.Echo objDialog.FileName
End If
 

小さなスクリプトなので、1 行ずつ見ていくことにします。まず、UserAccounts.CommonDialog オブジェクトのオブジェクト参照 (objDialog) を作成しています。次に、ダイアログ ボックスの Filter プロパティを設定しています。すべてのファイルを表示するので、フィルタは次のように設定します。

Visual Basic
objDialog.Filter = "All Files|*.*"
 

テキスト ファイルだけを表示する場合は、次のようなフィルタを使用します。

Visual Basic
objDialog.Filter = "Text Files|*.txt"
 

このスクリプトがどのように動作するかは、想像が付くかと思います。このコードでは、ファイルの種類の説明 (Text Files) を示し、"パイプ文字" (|) を挿入してから、標準的なワイルドカードを使用して、すべての .txt ファイル (*.txt) を対象とすることを指定しています。既定では .txt ファイルを表示し、ユーザーがすべてのファイルを表示することもできる、という手の込んだ処理を行う場合は、次のようなコードを使用します。

Visual Basic
objDialog.Filter = "Text Files|*.txt|All Files|*.*"
 

このコードを実際に実行すると、その意図するところがわかるはずです。

次に、既定のフォルダを指定しています。既定では、このダイアログ ボックスに C ドライブの root フォルダにあるファイルを表示するので、InitialDir プロパティを次のように設定しています。

Visual Basic
objDialog.InitialDir = "C:\"
 

C:\Windows フォルダ内のファイルを表示する場合は、次のようなコードを使用します。

Visual Basic
objDialog.InitialDir = "C:\Windows"
 

安心してください。このダイアログ ボックスは本格的な [ファイルを開く] ダイアログ ボックスであるため、どのフォルダにでも移動できます。最初に C:\Windows フォルダのファイルが表示されるからといって、そのフォルダ内のファイルしか開くことができないわけではありません。

最後に、次のコードを使用してダイアログ ボックスを表示します。

Visual Basic
intResult = objDialog.ShowOpen
 

後は、ユーザーがファイルを選択し、[OK] をクリックする (または [キャンセル] をクリックする) のを待つだけです。ユーザーが [キャンセル] をクリックした場合は、変数 intResult が 0 に設定されます。このスクリプトは、intResult の値をチェックし、0 であれば Wscript.Quit を使用して終了します。

では、ユーザーがファイルを選択し、[OK] をクリックした場合はどうかというと、intResult が -1 に設定され、FileDialog プロパティはユーザーが選択したファイルのパス名に設定されます。このスクリプトはパス名を表示するだけです。つまり、次のような結果が Echo 出力されます。

Visual Basic
C:\WINDOWS\Prairie Wind.bmp
 

ただし、言うまでもなく、ファイル パスの Echo 出力しかできないわけではありません。WMI や FileSystemObject などのテクノロジを使用して、選択されたファイルにバインドし、削除、コピー、圧縮、プロパティの取得など、あらゆるファイル操作を実行することもできます。

スクリプトがあれば何とかなります。

ちなみに、この方法では一度に 1 つのファイルしか選択できません。Ctrl キーを押しながら複数のファイルを選択することはできません。搭載している Windows XP 以降のコンピュータでは、複数のファイルを選択することもできますが、これについては別のコラムで取り上げることにします。