setxコマンドでパスを挿入する方法とは?

このQ&Aのポイント
  • setxコマンドを使用してシステム環境変数PATHにパスを挿入しようとしていますが、思い通りにいかない問題が発生しています。
  • setxコマンドを実行すると、意図しない動作が発生し、ユーザー環境変数にPATHが作成されてしまいます。
  • また、パスの優先順位を考慮してパスを先頭に挿入したいという要件もあります。現在のPATHの値は%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\です。
回答を見る
  • ベストアンサー

setxコマンドが思い通りにいかない

setxコマンドでシステム環境変数PATHに、パスを挿入しようと思っています。 setx "C:\hoge;%PATH%" /M とすると、なぜかユーザー環境変数にPATHが作られ、値が入ります。 更にユーザー環境変数に作られたPATHの値を除くと、 「C:\hoge;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0" /M」 となっており、なんだかコマンドが正常に処理されていないようでした。 因みにsetx "%PATH%;C:\hoge" /M ならうまくいきますが、パスの優先順位的に最優先させたい為、先頭に挿入したいです。 また、PATHに入っている値は以下の通りです。 %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\ 完全にお手上げ状態です。 どうすると正常に設定が行われるかご教示ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kteds
  • ベストアンサー率42% (1876/4424)
回答No.3

No.2の補足です。 > 正確には > setx PATH "C:\hoge;%PATH%" /M > と入力しています。 ですから、setxの構文通りにしてみてはどうでしょうか、と書いたのですが・・・ なんだか話がかみ合っていないようですね。 setxコマンドのヘルプを参照してはどうでしょうか。 添付画像は setx /? の例: です。

naktak
質問者

お礼

色々調査頂き、ありがとうございます。 結果的にsetxの挙動が最適とは思えず、WSHによる実行の方がよっぽど安定していると判断した為、 スクリプトでの環境変数操作を行うことにしました。(WinXP、Win7x86, Win7x64で確認済み) 【実行.bat】 call 環境変数登録.wsf "SYSTEM" "PATH" "c:\hoge" 1 【環境変数登録.wsf】 <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <package> <job id="environment"> <?job error="true" debug="true" ?> <object id="objFs" progid="Scripting.FileSystemObject" /> <script language="VBScript"> <![CDATA[ '** '* 引数1 : SYSTEM -> システム環境変数。全ユーザーに適用, '* USER -> ユーザー環境変数。ログオン・ユーザーごとに適用, '* PROCESS -> プロセス環境変数。現在有効な全環境変数(読み込み専用), '* VOLATILE -> 一時環境変数。ログオフと同時に破棄される一時的な環境変数 '* 引数2 : 環境変数名(例:PATH) '* 引数3 : 設定値 '* 引数4 : 0 -> 設定値のみを設定する '* 1 -> 設定値を先頭に挿入する '* 2 -> 設定値を末尾に追加する '* '*/ Set objArgs = WScript.Arguments.Unnamed Set objShell = WScript.CreateObject("WScript.Shell") Set objEnv = objShell.Environment(objArgs.Item(0)) Select Case objArgs.Item(3) Case 1 objEnv.Item(objArgs.Item(1)) = objArgs.Item(2) &";" & objEnv.Item(objArgs.Item(1)) Case 2 objEnv.Item(objArgs.Item(1)) = objEnv.Item(objArgs.Item(1)) &";" & objArgs.Item(2) Case Else objEnv.Item(objArgs.Item(1)) = objArgs.Item(2) End Select ]]> </script> </job> </package>

naktak
質問者

補足

えっと、C:\hogeはユーザーの入力に任せる為、C:\hogeとは限りません。 ダブルクォーテーションは、半角スペースなどが含まれている場合に、文字列の範囲を明示的に 決定するものだと認識しています。 その結果、ヘルプの例に従うと以下のいずれかになると考えます。 setx PATH "%ARGS1%;%PATH%" /M setx PATH "%ARGS1%";"%PATH%" /M (%ARGS1%部分は、set /pによってユーザー入力から受けた「C:\hoge」など) いずれも結果は同じで、ユーザー環境変数に登録され、かつコマンド(/M)までもが文字列だと認識されて 登録されてしまいます。 調べた結果、元々PATH内の最後に「\」が含まれていると、現象が発生します。 また、setxの動作に以下2点の不満がありました。  ・バッチから実行する関係上、登録されている文字列が全て展開されてしまう。   (「%SYSTEMROOT%」が「C:\Windows」のように)   結果的に、設定値の追加・挿入ではなく、完全な差し替えを行っているかのようになり、   差分確認が正確に行えない。  ・設定値が1024文字を超過すると切り捨てられる。

その他の回答 (2)

  • kteds
  • ベストアンサー率42% (1876/4424)
回答No.2

セミコロンは何の理由で記述しているのでしょうか? 構文規則通り(セミコロンなし、%PATH% をダブルクオテーション囲み )にすると、どうなりますか? setx C:\hoge "%PATH%" /M

naktak
質問者

補足

あ、すみません。構文を誤っていました。 正確には setx PATH "C:\hoge;%PATH%" /M と入力しています。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

setx "C:\hoge”;%PATH% /M じゃないの? ダブルクォーテーションで囲む必要があるのは ”C:¥Program Files”のような途中に空白を含む場合。 C:¥hoge くらいなら囲む必要ありません

naktak
質問者

補足

ユーザー入力に任せる形を取っているため、C:\hogeとは限りません。 また、%PATH%にもともと半角スペースが含まれる可能性も考慮したつもりです。 その為、ダブルクォーテーションは必須と考えています。 調べた結果、%PATH%の最後が「\」で終わっていると発生するようですし、 もともと%SYSTEMROOT%として登録されていた値が全て展開されてしまうし、 setxはあまり有用ではなさそうでしょうか?

関連するQ&A

  • コマンドプロンプトで、ipconfig  エラー

    自分のIPを調べるコマンド”ipconfig”をコマンドプロンプトから実行したら 『’ipconfig’は内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチファイルとして認識されていません。』 エラーが発生. ネットで検索し調べると、pathの設定を確認せよ。とのほとんどの助言かと思いまして、 pathに、       %windir%\system32 を加えましたが、効果ありません。ご助言をお願いしたいです。 【実行詳細】 (1)環境変数 Path (Javaを使用しているため、初期状態に加筆しております。) %JAVA\HOME%\bin; %SystemRoot%¥system32; %SystemRoot%;%SystemRoot%¥System32¥Wbem; %SYSTEMROOT%¥System32¥WindowsPowerShell¥v1.0¥ ; C:\Program Files (x86)\MySQL\MySQL Utilities 1.3.4\; %windir%\system32 (2)コマンドプロンプトで、 C:\Users>echo %path% を実行 %JAVA\HOME%\bin; C:\windows¥system32; C:\windows;C:\windows¥System32¥Wbem; C:\windows¥System32¥WindowsPowerShell¥v1.0¥ ; C:\Program Files (x86)\MySQL\MySQL Utilities 1.3.4\; C:\Program Files (x86)\Java\jdk1.6.0_19\bin (1)と(2)が一致していないのも不思議でありますが、pathはちゃんと上書き保存されております。 宜しくお願い致します。

  • javaの環境変数PATHについてご教授ください。

    javaの環境変数PATHについてご教授ください。 現状、"c:\"でjavacコマンドを入力すると、「内部コマンドまたは外部コマンド~」 と警告が表示されます。 環境変数については、 ・ユーザ環境変数にJAVA_HOMEを定義し、「C:\Program Files\Java\jdk1.6.0_20」を設定しています。 ・システム環境変数のPATHに、「%JAVA_HOME%\bin;%SystemRoot%;%SystemRoot%\System32;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\」を設定しております。 OSは、vistaです。 【補足】 ・C:\Program Files\Java\jdk1.6.0_20\binにディレクトリチェンジした場合、javacは実行できる。javac.exeはあります。

    • ベストアンサー
    • Java
  • Windows 7の環境変数について

    プライベートで使用しているWin 7 UltimateのPCについての質問です。 コンピュータはドメインには参加しておらず、ローカルのAdministatorsグループに所属しているユーザを常用しているのですが、「管理者モードではない」コマンドプロンプトからだと、pingなどのコマンドがコマンドとして認識されません。 環境変数は以下のとおりで、「C:\WIndows\System32」には通っているように見えますし、実際そこまでカレントディレクトリを移せば実行できます。 Path=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT% System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.AC \Core-Static 通常起動したコマンドプロンプトでもWindowsコマンドを使えるようにするには、どうしたらよいでしょうか?

  • Pathの設定

     今日は、Pathについて質問致します。  Win XPです  コマンドプロンプトから"Sysedit"で設定したPathを見てやると、 "SET PATH= C:\JUST\JSLIB32; C:\WINDOWS; C:\WINDOWS\COMMAND"と表示されます。  しかし、コントロールパネル⇒システム⇒環境変数から設定されているPathを見ると下のようになっています。 "%SYSTEMROOT%\system32; C:\JUST\JSLIB32; %SYSTEMROOT%; %SYSTEMROOT%\COMMAND; %SYSTEMROOT%\system32\WBEM"  なぜこの両者は違う表示なのでしょうか。  そもそもこの「%」は何を表しているのでしょうか。

  • setXコマンドがうまくバッチで動かない・・・

    setXコマンドをバッチファイルの中に書いてシステム環境変数に登録させているのですが、なぜかユーザー環境変数にセットされます。 BATの中にはこんな感じです。 Pathに追記をする要領です。 SETX PATH "%PATH%;C:\Extra\Shibin" -m -mでシステムに登録だと思ってはいたのですが・・・間違っていますでしょうか? Win7 64びtt版です

  • JAVAのコンパイルができません

    色んなページや雑誌でインストールの方法とかを見てやったのですがうまいこといきません インストールしたのはj2sdk-1_4_2_06-windows-i586-p.exeで環境変数もユーザー変数に 変数名をpath、変数値をC:\j2sdk1.4.2_06\bin 加えました。 それでもコマンドプロンプトを開いて javacを実行しましたが ’javac’は内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチファイルとして認識されていません。 と表示されます。 どうしたらいいのですか?教えてください ちなみに システム環境変数では ユーザー変数に 変数名がJAVA_HOMEには変数値がC:\j2sdk1.4.2_06 変数名がPathには変数値が%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\Justsystem\JSLIB32";C:\j2sdk1.4.2_06\bin となっています

    • ベストアンサー
    • Java
  • 'javac' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。

    JAVA初心者です。 C:\javasrc>javac 'javac' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と出ます。 C:\j2sdk1.4.2_04\bin>javac とするとコンパイル出来ます。 ユーザー変数が JAVA_HOME C:\j2sdk1.4.2_04 path C:\j2sdk1.4.2_04\bin システム環境変数が Path %SYSTEMROOT%\system32;%SYSTEMROOT%;%SYSTEMROOT%\COMMAND;%SYSTEMROOT%\system32\WBEM;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;c:\borland\bcc55\bin;%JAVA_HOME%\bin です。 よろしくお願いします。

  • 環境変数の再帰展開について

    環境変数の中で環境変数を使用したときに、 こちらの思ったように文字列が展開されません。 例. システム環境変数 SystemDrive=C: WORK_PATH=%SYSTEMDRIVE%\temp PATH=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem ユーザー環境変数 PATH=%WORK_PATH%;%PATH% こんな感じでセットされている場合、 コマンドプロンプトでset PATHした場合の結果が異なります。 Vistaでは C:\temp;C:\WINDOWS~ と展開されますが、 Windows XP環境では %SYSTEMDRIVE%\temp;C:\WINDOWS~ と、 %SYSTEMDRIVE%の部分がそのままになってしまいます。 Windowsの環境変数には2種類の属性があり、 上記の環境変数を登録する際は"展開可能"属性にしました。 またレジストリの"Command Processor\EnableExtensions" も1になっていることを確認しています。 ちなみにset WORK_PATHとしたときは、 両方の環境で C:\temp と表示されることから、 環境変数の再帰展開がうまく機能していないと思われます。 XP環境でもVista環境と同じように環境変数の再帰展開をすることは可能でしょうか?

  • JAVA環境設定についての質問です。

    jdk-6u24-windows-i586というJDKをダウンロードし、 環境変数などを設定しました。 しかしjavacを開いてもすぐ閉じてしまいますし。 プログラミング勉強用のファイルが開けず、エラーが出てしまいます。 こういった場合、どうしたらいいのでしょうか? 教えて下さると助かります。 環境変数について *PATHは従来のPATHの前に(しかし本来のPATHを誤って消してしまったので、%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbemですが) C:\Program Files\Java\jdk1.6.0_24;と入力しました。 *CLASSPATHは.を入力しました。 *javahomeには、C:\Program Files\Java\jdk1.6.0_24\bin ※文字化けしていますが「\」はすべて「¥」の半角です。

  • MS-DOSでperl実行時にコマンドプロンプトが認識されず困っていま

    MS-DOSでperl実行時にコマンドプロンプトが認識されず困っています。 Active Perlをインストールして、Tera-Padでスクリプトを書き、MS-DOSでテストしています。 "du"や"ls"などのコマンドを(``)で囲ってスクリプトに記述すると、「`du`は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません」というエラーが出てしまいます。winfaqを参照し、 http://homepage2.nifty.com/winfaq/w2k/trouble.html#1467 環境変数を設定しました。(但し、環境変数に設定しているのは下記の1行のみではありません。すでに1つ別のソフトインストールで自分でPATHを設定していますので、今回は";"で下の1行を追加しました。) %SystemRoot%;%SystemRoot%\System32;%SystemRoot%\System32\Wbem そしてPCを再起動しても事象は変わりません。 因みに、Active Perlは「C:\perl」フォルダにファイルがあります。binはその下にあり、環境変数にも「C:\perl\bin」として追加済みです。 いろいろと試してみたのですが、原因がわからず困っています。 ぜひアドバイスをいただければ大変助かります。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • Perl