SQLの窓

2015年02月23日

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



スクリプトが存在するディレクトリを ユーザ環境変数の PATH へ登録します。もし、システム環境変数またはユーザ環境変数に既に同じパスがあれば登録しません。登録位置は、PATH 環境変数文字列の一番最後になります

登録直後、cmd.exe で PATH の内容を見ても反映されないので、最後にエクスプローラを再起動しています。
<JOB>
<OBJECT id="WshShell" progid="WScript.Shell" />
<OBJECT id="WshNetwork" progid="WScript.Network" />
<OBJECT id="Fso" progid="Scripting.FileSystemObject" />
<SCRIPT language="VBScript">

strTitle = "スクリプトが存在するディレクトリをユーザPATH環境変数に登録"

' **************************************
' PC 名と ユーザ名を取得
' **************************************
strUser = WshNetwork.UserName
strMachine = WshNetwork.ComputerName

' **************************************
' スクリプトが存在するディレクトリを取得
' **************************************
strScriptPath = WScript.ScriptFullName
Set obj = Fso.GetFile( strScriptPath )
Set obj = obj.ParentFolder
strScriptPath = obj.Path

' **************************************
' WMI
' **************************************
Set obj = GetObject("winmgmts:\\.\root\cimv2")

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

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 = ""

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_

' **************************************
' エクスプローラを再起動
' ( ※ 登録されたパスを有効にします )
' **************************************
Set colProcessList = obj.ExecQuery _ 
	("Select * from Win32_Process Where Name = 'explorer.exe'") 
For Each objProcess in colProcessList
	on error resume next
	objProcess.Terminate() 
	on error goto 0
Next 

' 少し待ちます
Wscript.Sleep(500)
Call WshShell.Run( "explorer.exe" )


' **************************************
' 終了確認
' **************************************
Wscript.Echo "処理が終了しました"

</SCRIPT>
</JOB>


元となった Hey, Scripting Guy!

スクリプトを使用して環境変数を作成することはできますか


タグ:WMI VBScript
【VBScriptの最新記事】
posted by at 2015-02-23 22:27 | VBScript | このブログの読者になる | 更新情報をチェックする


Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX