2012-03-01 31 views
1

私は、PATH環境変数を取得し、そこに値があるかどうかを確認してから戻すバッチスクリプトを用意しています。たとえば:バッチスクリプトマシンの環境変数

SET CURRPATH=%PATH% 
:: do some stuff to check for a value in CURRPATH and add the value in if it is not in there 
setx PATH %PATH% 

これは動作しますが、問題は何か他のものは、私がインストールされていることである以前にPATHという名前ユーザーシステム環境変数を作成しました。バッチスクリプトで%PATH%変数にアクセスすると、ユーザー環境変数PATHとマシン環境変数PATHの両方が連結されます。スクリプトを実行するたびに、ユーザー変数PATHがマシン環境変数に追加されます。マシン環境変数にアクセスする方法はありますか?

私は単純にユーザー環境変数PATHを削除できますが、スクリプトを実行しているユーザーに同じ問題があるかどうかは保証できませんので、これは一般的な解決策ではありません。

注これは

答えて

0

変数PATHあなたのアプローチには、少なくとも一つの他の問題があるに特異的であるように思われる:それは望ましくない可能性がPATHに存在する任意の環境変数を、拡大していきます。また、setxがハングアップすることがあります。これは、変更をブロードキャストするときに期待通りに応答しない他のアプリケーションによるものだと私は信じています。

おそらく、MSIファイルを作成したり、別の適切な開発者向けのインストーラテクノロジを使用したりすることをお勧めします。

次に、環境変数を保持するレジストリ設定を操作するためのアプリケーション(バッチスクリプトではなく、実際のアプリケーション)を作成することをお勧めします。マシン環境変数を含むレジストリキーがここで見つけることができます:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 

はスーパーユーザでもthis question参照してください。そこには、バッチファイルベースのソリューションが含まれていますが、確実には機能しません。