Có công cụ dòng lệnh nào có thể được sử dụng để chỉnh sửa các biến môi trường trong Windows không?


15

Có công cụ dòng lệnh nào có thể được sử dụng để chỉnh sửa các biến môi trường trong Windows không?

Sẽ thật tuyệt nếu đây là công cụ thông minh, ví dụ:

  • Khi thêm một số đường dẫn để giả sử biến PATH và đường dẫn này đã có sẵn, nó không nên tăng gấp đôi mục này.
  • Việc chèn một đường dẫn mới vào biến PATH nên có thể trước / sau một số đường dẫn khác hoặc theo thứ tự cụ thể (đầu tiên, thứ 7, cuối cùng, v.v.).
  • Chỉ có thể thay đổi một phần giá trị của biến (trong trường hợp PATH một đường dẫn đã cho từ danh sách tất cả các đường dẫn).

Và điều cuối cùng nhưng không phải là ít nhất - tôi muốn các thay đổi của mình tồn tại giữa các phiên để SET đơn giản không còn nữa ...

Có một công cụ GUI rất hay cho cái này được gọi là Path Editor và tôi cần một cái gì đó giống như thế này nhưng cho dòng lệnh.


4
Về mặt kỹ thuật, vâng. Nó được gọi là SET. Tôi biết nó không đẹp, nhưng bạn không thể đơn giản hơn nhiều so với việc chỉ đặt các biến với các công cụ trong tay.
Michael Todd

Hấp dẫn. Tôi nghĩ chắc chắn sẽ có một công cụ bên thứ ba khá nổi tiếng cho việc này.
Sasha Chedygov

Phiên bản Windows nào bạn đang chạy?
Sasha Chedygov

@musicfreak Vista Home Premium 64 bit
Piotr Dobrogost

Câu trả lời:


16

Tôi không biết bất kỳ công cụ nào thực hiện việc này, nhưng có lẽ bạn có thể sử dụng reglệnh:

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

để đọc đường dẫn hiện tại và

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

để viết giá trị mới của bạn.

Bạn cần quyền quản trị để xử lý quyền truy cập trong HKLM. Nếu đó là một vấn đề, thay vào đó hãy xem xét sửa đổi cài đặt đường dẫn cụ thể của người dùng HKCU\Environment.


1
Câu trả lời này cần được chấp nhận, nó có thể thay đổi bất kỳ biến môi trường nào và thậm chí có thể được gói gọn trong một tệp bó để người ta chỉ cần nhập tên và giá trị mới.
Tamara Wijsman

Nếu điều này được kết hợp với Vi, nó sẽ đến gần hơn để đáp ứng các tiêu chí của người hỏi. ví dụ: một tệp bó ghi đường dẫn đến tệp văn bản tạm thời, mở tệp đó bằng vi, sau đó khi bạn đóng vi, nó ghi tệp vào đường dẫn. Bằng cách đó bạn có thể dễ dàng chỉnh sửa đường dẫn của mình thông qua dòng lệnh. Tôi đã làm một cái gì đó như thế trong XP, với một tệp bó, notepad và các lệnh reg đó.
barlop

1
CẢNH BÁO KHÔNG sao chép-dán này một cách thiếu suy nghĩ trừ khi bạn muốn làm điều gì đó ngớ ngẩn ...
n611x007

7

Nếu bạn cần một cách chung để đặt bất kỳ biến môi trường nào và duy trì các thay đổi, thì setx.exe sẽ là công cụ để sử dụng. Nó không thể làm những điều "thông minh" mà bạn đang yêu cầu, mặc dù ...

setx.exe được bao gồm trong Windows Vista trở lên; nếu bạn sử dụng phiên bản Windows cũ hơn, bạn có thể sử dụng liên kết tải xuống ở trên để tải xuống.


5

Đối với chương trình hiện tại, có path:

Hiển thị hoặc đặt đường dẫn tìm kiếm cho các tập tin thực thi.

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

Nhập PATH ;để xóa tất cả các cài đặt đường dẫn cmd.exetìm kiếm và chỉ tìm kiếm trong thư mục hiện tại.

Nhập PATHmà không có tham số để hiển thị đường dẫn hiện tại. Bao gồm %PATH%trong cài đặt đường dẫn mới làm cho đường dẫn cũ được thêm vào cài đặt mới.

Tuy nhiên, điều này là khá nhiều như set PATH.

Để các biến môi trường tồn tại, bạn phải chỉnh sửa sổ đăng ký hoặc sử dụng setx.


3

Tôi vừa phát hiện ra khả năng cho phép người dùng chạy hộp thoại chỉnh sửa Biến môi trường mà không có đặc quyền nâng cao.

Từ menu Bắt đầu, hãy chạy như sau:

rundll32 sysdm.cpl,EditEnvironmentVariables

2
+1 cho cách nhận dòng lệnh vào tiện ích chỉnh sửa GUI, bởi vì điều đó chắc chắn là thẳng hơn so với đường dẫn nhấp chuột, mặc dù câu trả lời không đúng chủ đề vì Q là về chỉnh sửa PATH từ dòng lệnh.
matt wilkie

2

thiết lập đường dẫn

(bộ trợ giúp)


1
điều này chỉ dành cho phiên cuối và để thêm / thay đổi giá trị, bạn cũng cần phải nhập lại toàn bộ đường dẫn cũ.
John T

2
Không đúng. THIẾT LẬP =% đường dẫn%; c: \ newpath
Michael Todd

2
bạn vẫn gõ nó, chỉ cần mở rộng :) Điều đó cũng sẽ không lưu, hãy thử thoát khỏi dấu nhắc lệnh và mở một cái mới sau đó kiểm tra đường dẫn của bạn.
John T

Anh ta không xác định liệu có cần phải kiên trì giữa các phiên hay không.
sangretu

4
Chà, nếu bạn kiểm tra xem patheditor (gợi ý của anh ta) làm gì, nó sẽ lưu nó vĩnh viễn. thiết lập PATH chỉ thực sự được sử dụng trong các tập lệnh xây dựng cho các chương trình vì nó là tạm thời.
John T

2

Bạn có thể muốn xem đường dẫn của bộ sưu tập gtools: http://www.p-nand-q.com/gtools.html

Nó cung cấp một tập hợp các lệnh cho lệnh promt như

pathed /APPEND %CD% /USER

để thêm đường dẫn hiện tại chẳng hạn. Tôi chưa thực sự kiểm tra nó một cách trung thực, vì tôi hoàn toàn ổn khi sử dụng GUI.

Các tùy chọn khác là:

  /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

Cùng với bộ sưu tập nào, bạn có cho mình một số công cụ tốt, tôi cho là vậy. Mà "định vị các tập tin thực thi trên 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

Nguồn: http://op111.net/82/


1
Bạn có thể giải thích những gì bạn đang liên kết đến? Câu trả lời chỉ liên kết có thể trở nên không hợp lệ nếu nội dung được liên kết không khả dụng.
bwDraco - Phục hồi Monica

Shure. Xin lỗi tôi đã hoàn toàn đề cập đến câu hỏi.
hugo der hungrige

Có vẻ như URL cho Gtools và đường dẫn hiện đã chết. p-nand-q.com/gtools.html
DevPlayer

1

Tôi đã viết một tập các kịch bản hàng loạt cho việc này. addpath.bat thêm các phần tử vào đường dẫn, rmpath.bat xóa các phần tử khỏi đường dẫn và lpath.bat chỉ liệt kê đường dẫn. Nhưng sau đó tôi cần một số tập lệnh hỗ trợ, vì vậy cũng có chkpath.bat.

Nó cuối cùng không phải là tầm thường và yêu cầu tr.exe và cat.exe, một vài tiện ích kiểu unix. Lý do không tầm thường: không có backticks trong cmd.exe (mặc dù bạn có thể sử dụng các vòng lặp cho việc này) và tên ngắn so với tên dài.

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.

Tôi nghĩ rằng forvòng lặp có thể được sử dụng thay vì tr/ catquá.
user1686

0

Trình quản lý đường dẫn (pathman.exe) từ Windows Server 2003 Resource Kit Tools là kết quả gần nhất tôi có thể tìm thấy. Nó đã có sẵn trong NT Resource Kit.


có thể thửsetx.exe
n611x007

@ n611x007, setxdành cho các biến môi trường chung; pathmanđặc biệt để thao tác (tức là phân tích cú pháp ) đường dẫn.
Synetech

0

Làm cách nào để kiểm tra xem thư mục có tồn tại trong% PATH% không? trên Stack Overflow có một mô tả nổi bật về những gì làm cho việc chỉnh sửa Windows PATH trở nên khó khăn cùng với một tệp bó để khắc phục chúng. Tìm hiểu làm thế nào để sử dụng đúng cách cần addpath.batmột chút thực hành vì cấu trúc gọi của nó là mới đối với tôi, nhưng điều này hoạt động:

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

và lặp đi lặp lại sẽ không thêm thư mục mới nếu nó đã có. Điều này không giải quyết làm cho các chỉnh sửa liên tục trong các phiên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.