情報収集

  WScript オブジェクトのプロパティより取得できる情報

  

strInfo = ""
strInfo = strInfo & WScript.FullName & vbCrLf
strInfo = strInfo & WScript.Name & vbCrLf
strInfo = strInfo & WScript.Path & vbCrLf
strInfo = strInfo & WScript.ScriptFullName & vbCrLf
strInfo = strInfo & WScript.ScriptName & vbCrLf
strInfo = strInfo & WScript.Version & vbCrLf

WScript.Echo strInfo
  

  

C:\WINDOWS\system32\cscript.exe
Windows Script Host
C:\WINDOWS\system32
D:\sakura\homepage\enum\vbsguide\sk.vbs
sk.vbs
5.6
  

  システムディレクトリ( system32 ) の取得

【方法1】

必ずしも正しいとはかぎりませんが、ほとんどの場合 WScript.Path で得られるディレクトリを
使用する事ができます。
サンプルスクリプト


【方法2】 ( 正式な方法 )

  

Set obj = CreateObject( "Shell.Application" )
Set objFolder = obj.Namespace( &H25 )
Set objFolderItem = objFolder.Self
strTarget = objFolderItem.Path
MsgBox( strTarget )
  
サンプルスクリプト


【方法3】

WMI が使用できる場合は、他にも情報をたくさん取得できます

  

WScript.Echo WMIGetSystemDirectory( )

' **********************************************************
' システムディレクトリの取得
' **********************************************************
Function WMIGetSystemDirectory( )

	Dim strComputer,objWMIService,colOSes,objOS

	strComputer = "."
	Set objWMIService = GetObject("winmgmts:" _
	 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
 
	Set colOSes = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
	For Each objOS in colOSes
		WMIGetSystemDirectory = objOS.SystemDirectory
	Next

End Function
  
サンプルスクリプト


【方法4】

Batch Helper を使用する場合はプロパティとして取得できます
( Windows API より取得されます )

  

Set BatchHelper = CreateObject( "Lbox.BatchHelper" )

WScript.Echo BatchHelper.SystemDirectory
  
BatchHelper のページ
プロパティのページ


【方法5】

C でAPI を使って システムディレクトリを printf するブログラム を作って利用する

  

' システムディレクトレリ取得
Set objExec = WshShell.Exec( "GetSytemDir.exe" )
Do While objExec.Status = 0
	WScript.Sleep 100
Loop
strDir = ""
Do While not objExec.StdOut.AtEndOfStream
	strDir = strDir & objExec.StdOut.ReadAll
Loop
  
サンプルスクリプト


  カレントディレクトリとスクリプトが存在するディレクトリ

WshShell オブジェクトより取得できます

  

WScript.Echo WshShell.CurrentDirectory
  

値を設定すると、カレントディレクトリを変更できます。
以下はディレクトリをダイアログで選択し、コマンドラインプロンプトを開きます。
( 選択したディリクトリがカレントとなります )

  

Set objFolder = Shell.BrowseForFolder( 0, "フォルダ選択", 11, 0 )
if objFolder is nothing then
	WScript.Quit
end if
if not objFolder.Self.IsFileSystem then
	WScript.Echo "ファイルシステムではありません"
	WScript.Quit
end if

WshShell.CurrentDirectory = objFolder.Self.Path
WshShell.Run( "cmd.exe" )
  

【重要】
カレントディレクトリは、そのスクリプトをエクスプローラから実行した場合は確実ですが、
他のツールより起動した場合は、そのツールによっては思った結果になりません。、
よって、その スクリプトが存在するディレクトリ を使用したほうが良い場合が多いかもしれません

  

strCurDir = WScript.ScriptFullName
strCurDir = Replace( strCurDir, WScript.ScriptName, "" )
  

上記方法は簡易的ではありますが、ほぼ間違いなく動作します。
しかし、完全な方法は以下のようになります


スクリプトが存在するディレクトリ


  

Set Fso = CreateObject( "Scripting.FileSystemObject" )

strCurPath = WScript.ScriptFullName
Set obj = Fso.GetFile( strCurPath )
Set obj = obj.ParentFolder
strCurPath = obj.Path