PATHを通したい。ただしCUIからに限る
修正
前回のスクリプトだと、addした際に;が余分につくので修正した。
Windowsの環境変数をコマンドから編集したい
とある事情により、ちょろっとコマンドから編集する機会があったので、調べてみたら
@IT:Windows TIPS -- Tips:WSHで環境変数を設定する
を見つけた。
SETコマンドでは揮発してしまう環境変数の設定がちゃんとできるらしい。
でもこれだと簡単に使えないのでちょっと改造した。
以下を適当なテキストエディタにはっつけて、wsfって拡張子で保存すると動く。
<?xml version="1.0" encoding="Shift_JIS" standalone="yes" ?> <package> <job id="environment"> <runtime> <description>PATH設定スクリプト</description> <unnamed name = "command" helpstring = "コマンド名(list,add,removeのいずれか)" type = "string" required = "true" /> <unnamed name = "pathValue" helpstring = "listの場合は不要. add,removeのときは追加、削除する値" type = "string" required = "false" /> <example>Example: envpath_manager.wsf command [pathValue]</example> </runtime> <script language="JScript"> <![CDATA[ if( WScript.Arguments.length < 1 ) { appEnd(); } var commandName = WScript.Arguments.Item(0); var WshShell = WScript.CreateObject("WScript.Shell"); var WshEnvironment = WshShell.Environment("User"); var envVarList = WshEnvironment.Item("PATH").split(";"); var command; switch( commandName ) { case "add": command = addValue; break; case "remove": command = removeValue; break; case "list": command = displayList; break; default: appEnd(); } if( command() == false ) { appEnd() } function addValue() { if( WScript.Arguments.length != 2 ) return false; var pathValue = WScript.Arguments.Item(1); for( var i in envVarList ) { if( envVarList[i] == "" ) continue; if( envVarList[i] == pathValue ) { WScript.Echo("すでに登録されている値です"); WScript.Quit(); } } var resultValue = WshEnvironment.Item("PATH"); if( pathValue.charAt( pathValue.length-1 ) != ";" ) pathValue += ";"; resultValue += pathValue; WshEnvironment.Item("PATH") = resultValue; } function removeValue() { if( WScript.Arguments.length != 2 ) return false; var pathValue = WScript.Arguments.Item(1); var resultValue = ""; for( var i in envVarList ) { if( envVarList[i] == pathValue ) { continue; } resultValue += envVarList[i] + ";"; } WshEnvironment.Item("PATH") = resultValue; } function displayList() { if( WScript.Arguments.length != 1 ) return false; for( var i in envVarList ) { if( envVarList[i] == "" ) continue; WScript.Echo(envVarList[i]); } return true; } function appEnd() { WScript.Arguments.ShowUsage(); WScript.Quit(); } ]]> </script> </job> </package>
前回のスクリプト
<?xml version="1.0" encoding="Shift_JIS" standalone="yes" ?> <package> <job id="environment"> <runtime> <description>PATH設定スクリプト</description> <unnamed name = "command" helpstring = "コマンド名(list,add,removeのいずれか)" type = "string" required = "true" /> <unnamed name = "pathValue" helpstring = "listの場合は不要. add,removeのときは追加、削除する値" type = "string" required = "false" /> <example>Example: envpath_manager.wsf command [pathValue]</example> </runtime> <script language="JScript"> <![CDATA[ if( WScript.Arguments.length < 1 ) { appEnd(); } var commandName = WScript.Arguments.Item(0); var WshShell = WScript.CreateObject("WScript.Shell"); var WshEnvironment = WshShell.Environment("User"); var envVarList = WshEnvironment.Item("PATH").split(";"); var command; switch( commandName ) { case "add": command = addValue; break; case "remove": command = removeValue; break; case "list": command = displayList; break; default: appEnd(); } if( command() == false ) { appEnd() } function addValue() { if( WScript.Arguments.length != 2 ) return false; var pathValue = WScript.Arguments.Item(1); for( var i in envVarList ) { if( envVarList[i] == "" ) continue; if( envVarList[i] == pathValue ) { WScript.Echo("すでに登録されている値です"); WScript.Quit(); } } var resultValue = WshEnvironment.Item("PATH"); if( pathValue.charAt( pathValue.length-1 ) != ";" ) resultValue += ";"; resultValue += pathValue + ";"; WshEnvironment.Item("PATH") = resultValue; } function removeValue() { if( WScript.Arguments.length != 2 ) return false; var pathValue = WScript.Arguments.Item(1); var resultValue = ""; for( var i in envVarList ) { if( envVarList[i] == pathValue ) { continue; } resultValue += envVarList[i] + ";"; } WshEnvironment.Item("PATH") = resultValue; } function displayList() { if( WScript.Arguments.length != 1 ) return false; for( var i in envVarList ) { if( envVarList[i] == "" ) continue; WScript.Echo(envVarList[i]); } return true; } function appEnd() { WScript.Arguments.ShowUsage(); WScript.Quit(); } ]]> </script> </job> </package>