2009年07月20日


VBScript : スクリプトが存在するディレクトリをユーザ環境変数の PATH へ登録

対象ディレクトリの中に置いて実行するだけです。
このスクリプトは、スクリプトのあるディレクトリを登録するので、
インストールしたいアプリケーションと共に保存しておけば
呼び出すだけで目的が達成されます
ブラウザでダウンロード
' **********************************************************
' ■ スクリプトが存在するディレクトリを
'    ユーザ環境変数の PATH へ登録します
'
' ■ もし、システム環境変数に既に同じパスがあれば
'    登録しません
'
' ■ 登録位置は、一番最後です
' **********************************************************
strTitle = "スクリプトが存在するディレクトリをユーザPATH環境変数に登録"

' **********************************************************
' PC 名と ユーザ名を取得
' **********************************************************
Set WshNetwork = CreateObject( "WScript.Network" )
strUser = WshNetwork.UserName
strMachine = WshNetwork.ComputerName

' **********************************************************
' スクリプトが存在するディレクトリを取得
' **********************************************************
Set Fso = CreateObject( "Scripting.FileSystemObject" )

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

' strScriptPath に 使用するディレクトリがセットされています


' **********************************************************
' システム環境変数のチェック
' **********************************************************
strValue = ""

strComputer = "."
Set obj = GetObject("winmgmts:\\.\root\cimv2")

Set objItems = obj.ExecQuery _
   ("select * from Win32_Environment where SystemVariable = True and Name = 'PATH'")

For Each objItem in objItems
	strValue = objItem.VariableValue
Next

if strValue <> "" then
	aData = Split( strValue, ";" )

	For I = 0 to Ubound( aData )
		if UCase(aData(I)) = UCase(strScriptPath) then
			Call Msgbox( "システム環境変数に既に登録されています", 0, strTitle )
			Wscript.Quit
		end if
	Next
end if


' **********************************************************
' ユーザ環境変数のチェック
' **********************************************************
strValue = ""

strComputer = "."
Set obj = GetObject("winmgmts:\\.\root\cimv2")

Set objItems = obj.ExecQuery _
   ("select * from Win32_Environment where SystemVariable = False and Name = 'PATH'")

For Each objItem in objItems
	if Ucase( objItem.UserName ) = Ucase(strMachine & "\" & strUser) then
		strValue = objItem.VariableValue
	end if
Next

if strValue <> "" then
	aData = Split( strValue, ";" )

	For I = 0 to Ubound( aData )
		if UCase(aData(I)) = UCase(strScriptPath) then
			Call Msgbox( "ユーザ環境変数に既に登録されています", 0, strTitle )
			Wscript.Quit
		end if
	Next
end if


' **********************************************************
' ユーザ環境変数を登録
' **********************************************************
strValue = strValue & ";" & strScriptPath

Set objEnv = obj.Get("Win32_Environment").SpawnInstance_

objEnv.Name = "PATH"
objEnv.UserName = strMachine & "\" & strUser
objEnv.VariableValue = strValue
objEnv.Put_




以下は、削除用です
システムとログインしているユーザをチェックして、両方にあれば
両方とも削除します。

ブラウザでダウンロード
■ 関連するページ
環境変数作成
Hey, Scripting Guy! : Path 環境変数に場所を追加する方法はありますか
Hey, Scripting Guy! : Path 環境変数から値を削除する方法はありますか
wmiquery
PATH 環境変数メンテナンス : Redmond Path


posted by at 2009-07-20 19:40 | WMI | このブログの読者になる | 更新情報をチェックする