90

を使用して Windows PATH 変数を変更したいと考えていますsetx。以下は、Windows 8 で少なくとも 50% の時間動作します。

setx PATH %PATH%;C:\Python27\;C:\Python27\Scripts\

「デフォルトの引数は2回しか使用できません」というエラーが表示される場合、次のようにするとうまくいくことがあります。

setx PATH "%PATH%;C:\Python27\;C:\Python27\Scripts\"

違いは、2 番目の引数を引用符で囲んだことです。%PATH%スペースを含むように展開する場合は、引用符が必要だと思います。

しかし、Windows 7 で奇妙な問題に遭遇しました。ある特定の Windows 7 マシンで、次の問題が発生しました。

echo %PATH%

それは印刷します:

C:\Foo\;C:\Bar\;[...lots of stuff...]C:\Baz\

次に、これを行います:

setx PATH "%PATH%;C:\Quux\"

次に、「エラー: 1,024 文字で切り捨てられました」と表示されます。次に、PATH に何が含まれているかを確認しましょう。

echo %PATH%

それは印刷します:

C:\Foo\;C:\Foo\;C:\Bar\;C:\Bar\;[...lots of stuff, now duplicated...]C:\B

...そして、1,024 文字で切り捨てられます。重複したため、実行されました。setxまた興味深い:エラーが発生し、「成功」とは言わなかったにもかかわらず、PATH の値が変化します。

この奇妙な動作を数回繰り返すことができました (幸いなことに、PATH の元の内容を保存していました)。

現時点で、PATHに追加する唯一の確実な方法は次のとおりです。

  1. echoパス。

  2. PATH の内容をテキスト ファイルにコピーし、手動で;C:\Python27\;C:\Python27\Scripts\PATH の末尾に追加します。

  3. テキスト ファイルからすべてをコピーします。

  4. setx PATH "<paste the string here>"

このプロセスは、Windows 7 と Windows 8 の両方で毎回機能します。

これを 1 つのコマンドで実行できるはずです。私は何を間違っていますか?

4

12 に答える 12

30

これは完全に機能します:

for /f "usebackq tokens=2,*" %A in (`reg query HKCU\Environment /v PATH`) do set my_user_path=%B

setx PATH "C:\Python27;C:\Python27\Scripts;%my_user_path%"

1 番目のコマンドは、USER 環境変数 'PATH' を 'my_user_path' 変数に取得します。2 行目は、'C:\Python27;C:\Python27\Scripts;' USER 環境変数 'PATH' に

于 2017-08-08T11:15:07.887 に答える
2
setx path "%PATH%; C:\Program Files (x86)\Microsoft Office\root\Office16" /m

これにより、余分なものを追加せずにシステム環境変数パスに追加し、データを失うことなく元の状態を維持する必要があります。このコマンドを使用して、McAfee の Web コントロールが Microsoft の Outlook デスクトップ クライアントに対して行う問題を修正しました。

コマンドラインはスペースを区切り文字として認識し、コマンドラインの次の値を実行しようとするため、パス値で引用符が使用されます。引用符はこの動作をオーバーライドし、引用符内のすべてを文字列として処理します。

于 2020-07-02T14:21:57.567 に答える
2

繰り返しますが、 Manohar Reddy Poreddyからの以前の回答は正しいものです。

共有するのに役立つと思われる多くの改善点があります。

@echo off

REM -- Use directory where script is located. For current working directory, use %CD%
set CURRENT_DIR=%~dp0
REM -- Great example from Strawberry Perl's portable shell launcher:
if #%CURRENT_DIR:~-1%# == #\# set CURRENT_DIR=%CURRENT_DIR:~0,-1%

REM -- Load the user PATH from the registry, making sure it is not blank
reg query HKCU\Environment /v PATH 1>nul 2>&1
if ERRORLEVEL 1 goto skipLoadPath
for /f "usebackq tokens=2,*" %%A in (`reg query HKCU\Environment /v PATH`) do set MY_USER_PATH=%%B

REM -- Optionally, checks if this directory is already part of the user PATH
REM -- This will avoid duplication, and allow this to be run multiple times,
REM -- but if a sub-directory of the current is already part of the user PATH,
REM -- this script will simply not do anything
echo %MY_USER_PATH%|find "%CURRENT_DIR%" >nul
if errorlevel 1 (goto skipLoadPath) else (goto skipSetXPath)
:skipLoadPath

REM -- Avoid adding a useless semicolon to the previous user PATH
if not "" == "%MY_USER_PATH%" set "MY_USER_PATH=%MY_USER_PATH%;"
REM -- Permanently set the following location as part of the system path
setx PATH "%MY_USER_PATH%%CURRENT_DIR%" >nul 2>&1
REM -- This will update the current environment, since SETX only updates the registry
set "PATH=%PATH%;%MY_USER_PATH%%CURRENT_DIR%"
:skipSetXPath
于 2021-03-20T14:03:55.290 に答える
2

私は同じ問題に直面していましたが、簡単な解決策を見つけました。

パスマンの使用。

pathman /as %M2%

たとえば、%M2% をシステム パスに追加します。それ以上でもそれ以下でもありません。ユーザー PATH とシステム PATH が混在する問題はもうありません。レジストリから正しい値を取得するのに苦労する必要はもうありません...

Windows 10で試した

于 2016-12-14T07:52:26.207 に答える
0

手順: 1.管理者権限でコマンド プロンプトを開きます。

手順: 2.次のコマンドを実行します: setx /M PATH "path\to;%PATH%"

[注: path\to がルートからのフォルダー パスを反映するように、必ずコマンドを変更してください。]

: setx /M PATH "C:\Program Files;%PATH%"

于 2017-05-29T16:12:43.307 に答える