it-swarm-es.com

¿Hay alguna herramienta de línea de comandos que se pueda usar para editar variables de entorno en Windows?

¿Hay alguna herramienta de línea de comandos que se pueda usar para editar variables de entorno en Windows?

Sería bueno si esta era una herramienta inteligente, por ejemplo:

  • Al agregar algún camino para digamos la variable de ruta y esta ruta ya está allí, no debe duplicar esta entrada.
  • Insertar una nueva ruta a la variable de ruta debe ser posible antes/después de alguna otra ruta o en un orden específico (el primero, el 7, el último etc.).
  • Debe ser posible cambiar solo una parte del valor de la variable (en caso de la ruta de una ruta dada de una lista de todas las rutas).

Y el último, pero no menos importante - Quiero que mis cambios persistan entre las sesiones , por lo que el set simple está fuera de la pregunta ...

Hay una herramienta de GUI muy bonita para este llamado Editor de la ruta y necesito algo como esto, pero para la línea de comandos.

15
Piotr Dobrogost

Path Manager (pathman.exe) de Windows Server 2003 Herramientas del kit de recursos es la coincidencia más cercana que pude encontrar. Ya estaba disponible en NT Resource Kit.

0
Piotr Dobrogost

No sé ninguna herramienta que haga esto, pero tal vez pueda usar el regcommand:

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

para leer el camino actual, y

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

para escribir su nuevo valor.

Necesita derechos de administrador para HSVING ACTURRY ACTCESS en HKLM. Si ese es un problema, considere modificar la configuración de ruta específica del usuario en HKCU\Environment en lugar de.

16
Treb

Si necesita una forma genérica de establecer cualquier variable de entorno y persistir los cambios, entonces setx.exe sería la herramienta para usar. Sin embargo, no puede hacer las cosas "inteligentes" que estás pidiendo ...

setx.exe está incluido con Windows Vista o posterior; Si usa una versión anterior de Windows, puede usar el enlace de descarga anterior para obtenerlo.

7
bobbymcr

Para el programa actual, hay path:

Muestra o establece una ruta de búsqueda para archivos ejecutables.

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

Escribe PATH ; Para borrar todas las configuraciones de búsqueda de la ruta y directamente cmd.exe Para buscar solo en el directorio actual.

Tipo PATH Sin parámetros para mostrar la ruta actual. Incluyendo %PATH% En la nueva configuración de ruta, se agrega que la ruta anterior se agregue a la nueva configuración.

Sin embargo, esto es casi lo mismo que set PATH.

Para las variables de entorno persistir, debe editar el registro o usar setx.

5
Joey

Acabo de descubrir la capacidad de permitir que los usuarios ejecuten el cuadro de diálogo Editar las variables de entorno sin privilegios elevados.

Desde el menú Inicio, ejecute lo siguiente:

rundll32 sysdm.cpl,EditEnvironmentVariables
3
David Tersigni

Podría querer visitar la colección GTOOLS: http://www.p-nand-q.com/gtools.html

Proporciona un conjunto de comandos para el comando promt.

pathed /APPEND %CD% /USER

para agregar la ruta actual, por ejemplo. Realmente no lo he revisado para ser honesto, ya que estoy totalmente bien con usar una GUI.

Otras opciones son:

  /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

Junto con qué de la misma colección, te tienes algunas buenas herramientas, supongo. Que "localiza archivos ejecutables en la ruta".

 /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

Fuente: http://op111.net/82/

2
hugo der hungrige

ruta

(conjunto de ayuda)

2
sangretu

Escribí un conjunto de scripts por lotes para esto. addpath.bat agrega elementos a la ruta, RMPATH.BAT elimina elementos de la ruta y lpath.bat solo enumera la ruta. Pero luego necesitaba algunos scripts de apoyo, así que también hay chkpath.bat.

Terminó siendo no trivial y obligado a TR.EXE y CAT.EXE, un par de utilidades de estilo UNIX. La razón por la que no es trivial: no hay backticks en cmd.exe (aunque puede usar para los bucles para esto), y los nombres cortos en comparación con los nombres largos.

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.
1
Cheeso

¿Cómo verificar si existe directorio en% ruta%? En el desbordamiento de la pila tiene una descripción excepcional de lo que hace que la edición de la ruta de Windows sea difícil junto con un archivo por lotes para superarlos. Averiguar cómo usar correctamente addpath.bat tomó un poco de práctica ya que la estructura de llamadas fue nueva para mí, pero esto funciona:

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

y los despidos repetidos no agregarán el nuevo directorio si ya está presente. Esto no se dirige a hacer las ediciones persistentes en todas las sesiones.

0
matt wilkie