Windows'ta ortam değişkenlerini düzenlemek için kullanılabilecek herhangi bir komut satırı aracı var mı?


15

Windows'ta ortam değişkenlerini düzenlemek için kullanılabilecek herhangi bir komut satırı aracı var mı?

Bunun akıllı bir araç olması iyi olurdu, örneğin:

  • Diyelim ki PATH değişkeni diyelim ve bu yol zaten orada.
  • PATH değişkenine yeni bir yol eklemek, başka bir yoldan önce / sonra veya belirli bir sırada (ilk, 7, son vb.) Mümkün olmalıdır.
  • Değişken değerinin sadece bir kısmını değiştirmek mümkün olmalıdır (PATH olması durumunda, tüm yolların listesinden belirli bir yol).

Ve son fakat en az değil - Değişikliklerimin oturumlar arasında kalmasını istiyorum, bu yüzden basit SET söz konusu değil ...

Path Editor olarak adlandırılan bunun için çok güzel bir GUI aracı var ve komut satırı için böyle bir şeye ihtiyacım var.


4
Teknik olarak, evet. Buna SET denir. Güzel olmadığını biliyorum, ancak değişkenleri eldeki araçlarla ayarlamaktan daha kolay olamazsınız.
Michael Todd

İlginç. Bunun için oldukça iyi bilinen bir üçüncü taraf aracı olacağını kesin olarak düşündüm.
Sasha Chedygov

Hangi Windows sürümünü kullanıyorsunuz?
Sasha Chedygov

@musicfreak Vista Home Premium 64bit
Piotr Dobrogost

Yanıtlar:


16

Bunu yapan herhangi bir araç bilmiyorum, ama belki regkomutu kullanabilirsiniz :

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

geçerli yolu okumak ve

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

yeni değerinizi yazmak için.

HKLM'de doğru erişim için yönetici haklarına ihtiyacınız vardır. Bu bir sorunsa, HKCU\Environmentbunun yerine kullanıcıya özel yol ayarını değiştirmeyi düşünün .


1
Bu yanıt kabul edilmiş olmalı, herhangi bir ortam değişkenini değiştirebilir ve hatta bir toplu iş dosyasında kapsüllenebilir, böylece yalnızca adı ve yeni değeri girmesi gerekir.
Tamara Wijsman

Bu Vi ile birleştirilirse, sorucının kriterlerini karşılamaya yaklaşırdı. örneğin, geçici bir metin dosyasının yolunu yazan bir toplu iş dosyası, vi'de açar, vi'yi kapattığınızda dosyayı yola yazar. Bu şekilde yolunuzu komut satırı üzerinden kolayca düzenleyebilirsiniz. Bir toplu iş dosyası, not defteri ve bu reg komutları ile XP'de böyle bir şey yaptım.
barlop

1
UYARI Aptalca bir şey yapmak istemiyorsanız bu düşüncesizce kopyalayıp yapıştırmayın ...
n611x007

7

Herhangi bir ortam değişkenini ayarlamak için genel bir yola ihtiyacınız varsa ve değişikliklerin devam etmesi için setx.exe kullanılacak araç olacaktır. Gerçi istediğin "akıllı" şeyleri yapamaz ...

setx.exe dosyası Windows Vista veya sonraki sürümlerinde bulunur; Windows'un daha eski bir sürümünü kullanıyorsanız, bunu almak için yukarıdaki indirme bağlantısını kullanabilirsiniz.


5

Mevcut program için path:

Yürütülebilir dosyalar için bir arama yolu görüntüler veya ayarlar.

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

Tip PATH ;tüm arama yolu ayarlarını temizlemek ve yönlendirmek için cmd.exeyalnızca geçerli dizinde arayın.

Tür PATHGeçerli yolu göstermek için parametreler olmadan. %PATH%Yeni yol ayarına dahil etmek, eski yolun yeni ayara eklenmesine neden olur.

Ancak, bu hemen hemen aynıdır set PATH.

Ortam değişkenlerinin kalıcı olması için kayıt defterini düzenlemeniz veya kullanmanız gerekir setx.


3

Kullanıcıların yükseltilmiş ayrıcalıklar olmadan Ortam Değişkenleri düzenleme iletişim kutusunu çalıştırmalarına izin verme yeteneğini yeni keşfettim.

Başlat menüsünden aşağıdakileri çalıştırın:

rundll32 sysdm.cpl,EditEnvironmentVariables

2
+1, GUI düzenleme widget'ına ulaşmanın bir komut satırı yolu için, çünkü cevap konu dışı olsa da, Q komut satırından PATH'ı düzenlemekle ilgili olduğu için, bu kesinlikle tıklama yolundan daha düzdür.
matt wilkie

2

PATH ayarla

(yardım seti)


1
bu yalnızca terminal oturumu içindir ve değer eklemek / değiştirmek için eski yolun tamamını yeniden yazmanız gerekir.
John T

2
Doğru değil. SET PATH =% yol%; c: \ newpath
Michael Todd

2
hala yazdınız, sadece genişletilmemiş :) Bu da kaydedilmeyecek, komut isteminden çıkmayı ve yeni bir tane açmayı ve ardından yolunuzu kontrol etmeyi deneyin.
John T

Seanslar arasında kalmanın gerekip gerekmediğini belirtmedi.
sangretu

4
Eh, hangi patheditor (onun önerisi) ne yaptığını kontrol ederseniz, onu kalıcı olarak kaydeder. set PATH yalnızca geçici olduğu için programlar için komut dosyalarında gerçekten kullanılır.
John T

2

Gtools koleksiyonunun yolunu kontrol etmek isteyebilirsiniz: http://www.p-nand-q.com/gtools.html

Gibi promt için bir dizi komut sağlar

pathed /APPEND %CD% /USER

geçerli yolu eklemek için. Bir GUI kullanarak tamamen iyi olduğum için dürüst olmak için gerçekten kontrol etmedim.

Diğer seçenekler:

  /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

Aynı koleksiyondan hangisiyle birlikte, kendinize bazı iyi araçlarınız var sanırım. Hangi "PATH yürütülebilir dosyaları bulur".

 /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

Kaynak: http://op111.net/82/


1
Neye bağlandığınızı açıklayabilir misiniz? Bağlantılı içerik kullanılamaz olduğunda, yalnızca bağlantı yanıtları geçersiz olabilir.
bwDraco

Shure. Özür dilerim, soruyu ima ediyordum.
hugo der hungrige

Gtools için URL gibi görünüyor ve yol artık öldü. p-nand-q.com/gtools.html
DevPlayer

1

Bunun için bir dizi toplu komut dosyası yazdım. addpath.bat yola öğeler ekler, rmpath.bat öğeleri yoldan kaldırır ve lpath.bat sadece yolu listeler. Ama sonra bazı destek komut dosyalarına ihtiyacım vardı, bu yüzden chkpath.bat da var.

Önemsiz değil sona erdi ve tr.exe ve cat.exe, unix tarzı araçlar bir çift gerekli. Önemsiz değil nedeni: cmd.exe'de backticks yok (bunun için döngüler için kullanabilirsiniz) ve uzun adlara karşı kısa adlar.

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.

Bence fordöngü tr/ yerine de kullanılabilir cat.
user1686

0

Windows Server 2003 Kaynak Seti Araçları'ndan Path Manager (pathman.exe) bulabildiğim en yakın eşleşme. NT Kaynak Seti'nde zaten mevcuttu.


belki denemeksetx.exe
n611x007

@ n611x007, setxgenel ortam değişkenleri içindir; pathmanyolu özel olarak yönlendirmek (yani ayrıştırmak ) içindir.
Mart'ta Synetech

0

% PATH% dizininin olup olmadığını nasıl kontrol edebilirim? Stack Overflow, Windows PATH düzenlemesini, bunların üstesinden gelmek için bir toplu iş dosyasıyla birlikte zorlaştıran şeyin olağanüstü bir açıklamasına sahiptir . Düzgün addpath.batbir şekilde nasıl kullanılacağını anlamak, yapı olarak adlandırılması benim için yeni bir şeydi, ancak bu işe yarıyor:

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

ve tekrarlanan tetiklemeler zaten mevcutsa yeni dizini eklemez. Bu, düzenlemelerin oturumlar boyunca kalıcı olmasını sağlamaz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.