Windowsで環境変数を編集するために使用できるコマンドラインツールはありますか?


15

Windowsで環境変数を編集するために使用できるコマンドラインツールはありますか?

これがスマートなツールであればいいでしょう、例えば:

  • PATH変数にパスを追加し、このパスが既に存在している場合、このエントリを2倍にしないでください。
  • PATH変数への新しいパスの挿入は、他のパスの前後に、または特定の順序(最初、7番目、最後など)で可能です。
  • 変数の値の一部のみを変更できるようにする必要があります(PATHの場合、すべてのパスのリストから指定されたパス)。

最後になりましたが、セッション間で変更を保持したいので、単純なSETは問題外です...

これにはパスエディターと呼ばれる非常に優れたGUIツールがあり、コマンドライン以外にこのようなものが必要です。


4
技術的には、はい。SETと呼ばれます。きれいではないことは承知していますが、手元のツールを使用して変数を設定することほど簡単ではありません。
マイケルトッド

面白い。これにはかなりよく知られたサードパーティのツールがあると確信していました。
サーシャチェディゴフ

どのバージョンのWindowsを実行していますか?
サーシャチェディゴフ

@musicfreak Vista Home Premium 64ビット
ピョートルドブロゴスト

回答:


16

これを行うツールはわかりませんが、reg次のコマンドを使用できます。

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path

現在のパスを読み取る

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /d "newPath" /f

新しい価値を書くために。

HKLMでhsvingの権利を取得するには管理者権限が必要です。問題がある場合は、HKCU\Environment代わりにユーザー固有のパス設定を変更することを検討し てください。


1
この回答は受け入れられるべきでした。環境変数を変更することができ、名前と新しい値を入力するだけでバッチファイルにカプセル化することもできます。
タマラWijsman

これとViを組み合わせると、質問者の基準を満たすことに近づきます。たとえば、パスを一時テキストファイルに書き込み、viでそれを開き、viを閉じるとファイルをパスに書き込むバッチファイル。そうすれば、コマンドラインから簡単にパスを編集できます。XPでは、バッチファイル、メモ帳、およびこれらのregコマンドを使用して、そのようなことを行いました。
barlop

1
警告何か愚かなことをしたくない限り、これを気にせずにコピー
アンド

7

環境変数を設定し、変更を保持する一般的な方法が必要な場合は、setx.exeを使用するツールになります。しかし、あなたが求めている「スマートな」ことはできません...

setx.exeはWindows Vista以降に含まれています。以前のバージョンのWindowsを使用している場合は、上記のダウンロードリンクを使用して入手できます。


5

現在のプログラムには、次のものがありますpath

実行可能ファイルの検索パスを表示または設定します。

PATH [[drive:]path[;...][;%PATH%]
PATH ;

入力PATH ;してすべての検索パス設定をクリアcmd.exeし、現在のディレクトリでのみ検索を指示します。

PATHパラメーターなしで入力すると、現在のパスが表示されます。%PATH%新しいパス設定に含めると、古い設定が新しい設定に追加されます。

ただし、これはとほぼ同じset PATHです。

環境変数を保持するには、レジストリを編集するか、を使用する必要がありますsetx


3

ユーザーが昇格した権限なしで環境変数編集ダイアログを実行できるようにする機能を発見しました。

[スタート]メニューから、次を実行します。

rundll32 sysdm.cpl,EditEnvironmentVariables

2
GUIの編集ウィジェットにアクセスするためのコマンドラインの方法については+1です。QはコマンドラインからのPATHの編集に関するものであるため、答えはトピック外ですが、クリックパスよりも確かに簡単です。
マットウィルキー

2

パスを設定

(ヘルプセット)


1
これはターミナルセッション専用です。値を追加/変更するには、古いパス全体を再入力する必要があります。
ジョンT

2
違います。SET PATH =%path%; c:\ newpath
Michael Todd

2
あなたはまだそれを入力しましたが、単に展開していません:)それも保存されません、コマンドプロンプトを終了して新しいプロンプトを開いてパスを確認してください。
ジョンT

彼は、セッション間で持続する必要があるかどうかを指定しませんでした。
サングレツ09

4
さて、patheditor(彼の提案)が何をするかをチェックすると、永久に保存されます。set PATHは一時的なものであるため、プログラムのビルドスクリプトでのみ実際に使用されます。
ジョンT

2

あなたはgtoolsコレクションのパスをチェックアウトしたいかもしれません:http ://www.p-nand-q.com/gtools.html

次のようなコマンドプロンプトに一連のコマンドを提供します。

pathed /APPEND %CD% /USER

たとえば、現在のパスを追加します。私はGUIの使用にまったく問題がないので、正直に言って実際にはチェックアウトしていません。

その他のオプションは次のとおりです。

  /MACHINE: print machine PATH
     /USER: print user PATH
      /ADD: add variable at the head
   /APPEND: add variable at the tail
   /REMOVE: remove path / index
     /SLIM: strip duplicate vars
      /ENV: environment variable, defaults to PATH

同じコレクションのどれと一緒に、あなたはあなた自身にいくつかの良いツールを手に入れたと思う。「PATHで実行可能ファイルを見つける」。

 /EXTENSION: search for extension , can be a ; separated list
       /DIR: add directory , can be a ; separated list
 /RECURSIVE: search directories recursively
    /SINGLE: stop after the first find result
       /ENV: environment variable, defaults to PATH
FILE {FILE}: one or more files to find

ソース:http : //op111.net/82/


1
リンクしているものを説明できますか?リンクされたコンテンツが利用できなくなると、リンクのみの回答が無効になる可能性があります。
bwDraco -復活モニカ

シュレ。申し訳ありませんが、暗黙のうちに質問を参照していました。
ヒューゴデアハングリゲ

GtoolsのURLのようで、pathedは現在無効です。 p-nand-q.com/gtools.html-DevPlayer 15
1

1

このための一連のバッチスクリプトを作成しました。addpath.batは要素をパスに追加し、rmpath.batは要素をパスから削除し、lpath.batはパスのみをリストします。しかし、その後、いくつかのサポートスクリプトが必要だったため、chkpath.batもあります。

最終的にはささいなものではなく、unixスタイルのユーティリティであるtr.exeとcat.exeが必要でした。その理由は簡単ではない:cmd.exeにバックティックがない(これにはforループを使用できますが)、短い名前と長い名前。

addpath.bat:

@echo off
setlocal
set cwd=%~dps0

goto testit

:loopy

call %cwd%chkpath "%~1"
if %errorlevel%==2 (
  set path=%path%;%~1
)

shift

:testit
if not _%1==_ goto loopy


call %cwd%lpath.bat

endlocal & set path=%path%

ChkPath.bat:

@echo off
goto START

-------------------------------------------------------
chkpath.bat

checks path for existence of the given segment.
Returns 1 if present, 2 if not present, 0 if not checked.

The matching and checking complicated by case sensitivity and "short pathnames".

created sometime in 2003 and lovingly maintained since then.


-------------------------------------------------------

:START
setlocal enabledelayedExpansion
set rc=0
set cwd=%~dps0
set curdrive=%~d0
set tr=%curdrive%\bin\tr.exe
set regexe=%windir%\system32\reg.exe


if _%1==_ goto Usage


@REM convert arg 1 to a fully-qualified, short path name,
@REM and then convert to uppercase.
set toupper=%~fs1
call :ToUpper
set tocheck=%toupper%


if not _%TEMP%==_ goto GotTemp
call :gettemp


:GotTemp
set d=%DATE:~4%
set stamp=%d:~6%%d:~3,2%%d:~0,2%%TIME::=%
set d=
set tempfile1=%TEMP%\chkpath1-%stamp%.tmp

echo %path% | %tr% ; \n  >  %tempfile1%

@REM check each element in the path for the match:
for /f  "delims=^" %%I in (%tempfile1%) do (
  if !rc!==0 (
call :CheckElt "%%I"
  )
)

if %rc%==0 set rc=2
goto END


--------------------------------------------
* checkelt
*
* check one element in the path to see if it is the same
* as the TOCHECK string. The element is first canonicalized.
*

:CheckElt
@REM remove surrounding quotes
set ERF=%1
if [x%ERF%]==[x] goto CheckEltDone
@REM convert to fully-qualified, short paths, uppercase
set TOUPPER=%~fs1%
call :ToUpper
if _%TOCHECK% == _%TOUPPER% set rc=1
:CheckEltDone
goto:EOF
--------------------------------------------


--------------------------------------------
* backtick
*
* invoke a command and return the result as a string.
* This is like backtick in csh or bash.
* To call, set variable BACKTICK to the command to be run.
* The result will be stored in the env variable of the same name.
*

:backtick
FOR /F "usebackq delims=" %%i IN (`%backtick%`) DO (
  SET backtick=%%i
)
goto backtick_done
:backtick_none
  SET backtick=nothing to exec
:backtick_done
goto:EOF
--------------------------------------------


--------------------------------------------
* gettemp
*
* get the temporary directory, as stored in the registry.
* Relies on backtick.
*
* The result set TEMP.
*

:gettemp
set regkey=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
set regvalname=Local AppData
set backtick=%regexe% query "%regkey%" /v "%regvalname%"
call :backtick
for /f "tokens=4" %%a in ("%backtick%") do (
  set temp=%%a
)
goto:EOF
--------------------------------------------



--------------------------------------------
* ToUpper
*
* Convert a string to all uppercase.
* To call, set variable TOUPPER to the thing to be converted.
* The result will be stored in the env variable of the same name.
*

:ToUpper
  FOR /F "usebackq delims=" %%I IN (`echo %toupper% ^| %tr% a-z A-Z`) DO (
SET toupper=%%I
  )
goto:EOF
--------------------------------------------


--------------------------------------------
:CleanUp
  if _%tempfile1%==_ goto CleanUpDone
  if exist %tempfile1% del %tempfile1%
  :CleanUpDone
goto:EOF
--------------------------------------------


--------------------------------------------
:Usage
echo.
echo Usage: chkpath ^<path^>
echo checks if path element is included in path variable.
echo returns 1 if yes, 2 if no, 0 if not checked.
echo.
goto END
--------------------------------------------


:END
call :CleanUp

:ReallyEnd

endlocal & set errorlevel=%rc%
@REM set errorlevel=%rc%
@REM echo %errorlevel%

lpath.bat:

@echo.
@set curdrive=%~d0

@REM This form post-fixes a | at the end of each path element. Useful for debugging trailing spaces.
@REM @path | %curdrive%\cygwin\bin\sed.exe -e s/PATH=// -e 's/;/^|\n/g' -e 's/$/^|/g'

@REM This form shows bare path elements.
@REM @path | %curdrive%\cygwin\bin\sed.exe -e 's/PATH=//' -e 's/;/^\n/g'
@path | %curdrive%\utils\sed -e "s/PATH=//" | %curdrive%\utils\tr ; \n
@echo.

forループもtr/の代わりに使用できると思いcatます。
user1686 09

0

Windows Server 2003リソースキットツールのPath Manager(pathman.exe)は、私が見つけることができる最も近い一致です。NTリソースキットで既に利用可能でした。


多分試すsetx.exe
n611x007

@ n611x007 setxは、一般的な環境変数用です。pathmanは、パスの操作(解析)専用です。
Synetech

0

%PATH%にディレクトリが存在するかどうかを確認する方法は?スタックオーバーフローの上に持っている優れた記述のWindows PATHがそれらを克服するために、バッチファイルと一緒に困難で編集するもののを。addpath.bat呼び出し構造は私にとって新しいものだったので、適切に使用する方法を理解するには少し練習が必要でしたが、これはうまくいきます:

set _path=C:\new\directory\to\add\to\path
call addpath.bat _path
set _path=

また、新しいディレクトリが既に存在している場合、繰り返し実行しても新しいディレクトリは追加されません。これは、セッション間で編集を永続化することには対応していません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.