setx
永久修改环境variables。
set
仅在批处理脚本持续时间内使variables可用。
有没有办法设置一个variables,以保持其值,直到系统重新启动?
例如在我的batch file中,我正在检查variables是否如下设置:
if %MYVAR% == 1 ( <block> )
@ECHO Off IF NOT EXIST q25244121.org GOTO done :: reset to original FOR /f "tokens=1*delims==" %%a IN (q25244121.org) DO ( IF DEFINED %%a FOR /f "tokens=1*delims==" %%p IN ('set %%a') DO ( IF "%%a"=="%%p" IF "%%b" neq "%%q" SET "%%a=%%b" ) ) :: Delete if not originally defined FOR /f "tokens=1*delims==" %%p IN ('set') DO ( FINDSTR /L /i /c:"%%p=" q25244121.org >NUL IF ERRORLEVEL 1 SET "%%p=" ) :done :: Record current settings set>q25244121.org EXIT /b
这可能适合你。 您需要将CAPS中的SET
指令更改为SETX
。 tempfile无疑也需要放在一个文件中,用户名是你要使用的名字的一部分。
如果要将此批次包含在启动目录中,则应该还原上次保存的环境变量的值。
所以,在第一次登录时,当前变量的值被存储。 在后续登录中,无论是否执行了setx
,环境都将恢复到最后存储的环境。
但是,您需要更改程序。 这将恢复到已知的状态。 如果你真的想setx
一个值或者安装一些增加新的环境变量值或改变现有值的软件(在这里最好使用PATH
),那么你需要先运行这个例程,进行修改,删除保存文件,重新运行这个例程。 尴尬,我承认 – 但这是一个办法。
哦 – 记得在setx
之后set
你的变量。 你甚至可以写一个setxX
批处理setx
然后set
(反之亦然)所需的变量。
您可以通过使用JScript的WshShell.Environment方法的Batch-JScript混合脚本来实现。 该文档指定有四种类型的环境:系统,用户,易失性和进程,以及易失性类型“适用于当前登录会话,不在注销和重新启动之间保存”,这正是您想要的:
@if (@CodeSection == @Batch) @then @echo off rem Define a persistent variable for the current OS session only via JScript Cscript //nologo //E:JScript "%~F0" MYVAR "This is the value" goto :EOF @end var colEnvVars = WScript.CreateObject("WScript.Shell").Environment("Volatile"); colEnvVars(WScript.Arguments(0)) = WScript.Arguments(1);
您必须将以前的代码保存在.bat文件中,并将其作为任何批处理文件执行。 请注意,以这种方式定义的变量在当前的 cmd.exe窗口中不可用,但仅在将来的cmd.exe窗口中在同一个OS会话中打开。
在Windows 8.1上测试