如何在使用setx命令后检索值?

16

我需要在批处理文件中存储一个值(时间戳),并在以后检索它。因此,我在 Stack Overflow 上搜索了有关如何存储持久变量的答案,并找到了 setx。

我使用它的方法如下:

C:\tmp>setx TIME_VAR %time%

SUCCESS: Specified value was saved.

但是当我尝试使用echo打印它时,它并不存在:

C:\tmp>echo TIME_VAR
TIME_VAR

C:\tmp>echo %TIME_VAR%
%TIME_VAR%

我该如何检索已存储的值?


2
你是否非常需要使用 setx 命令?我的意思是,是否可以使用 set 命令代替? - Anton Semenov
是的,在我的情况下,我希望该值保持不变 :o - code_fodder
3个回答

8

来自文档 (setx /?)

由于SETX将变量写入注册表中的主环境中,所以编辑只有在打开新的命令窗口时才会生效 - 它们不会影响当前的CMD或PowerShell会话。


啊……是的,那确实起作用了:)当我关闭CMD并打开一个新的时,它可以工作——这正是我想要的,非常感谢。 - code_fodder
1
特别是,如果您使用setsetx,则已经涵盖了所有情况。请注意,由于其他进程未能正确响应广播消息,因此setx有时可能会挂起。如果这是一个问题,您可能需要考虑将数据存储在文件中。 - Harry Johnston

1
使用setx命令后,您无需等待重新启动或进入新的实例/会话即可获取/使用此值。此值可以在Windows注册表中读取:
在您的情况下:
setx TIME_VAR %time%

for /f "tokens=3 delims=^ " %%i in ('reg query HKCU\Environment ^| findstr /i /c:"TIME_VAR"') do  echo/%%i

setx TIME_VAR %time%

for /f "tokens=3 delims=^ " %%i in ('reg query HKCU\Environment ^| findstr /i /c:"TIME_VAR"') do  (

echo/ local and next session  = = = =  
echo/ Setx Reg Value = "%%i" 

echo/ local and next session  = = = =  
echo/ TIME_VAR  Value = %%i

:eof

result:

 :: local and next session  = = = = 
 Setx Reg Value = 13:32:05,15

 :: in same session and also in next
 TIME_VAR Value = 13:32:05,15

0

我使用“编辑系统环境变量”中的图形化UI,在“环境变量…”部分查看和删除我使用setx设置的条目。这样,我也能够验证setx实际上正在更新变量。

请查看以下两个线程:

我也无法使用以下命令在cmdpowershell中查看值:

echo %GOPROXY%
%GOPROXY%

在我的情况下,echo 二进制文件指向:
which echo
/usr/bin/echo

这不是描述相同的命令。

man echo

我猜这是随着Git安装而来的。

对我来说,建议的setx /?也没有起作用:

setx GOPROXY ""
ERROR: Invalid syntax.
Type "SETX /?" for usage.

你混淆了Windows和Linux的shell:在Linux shell中,文件路径以“/”开头,变量以“$”开头。但是它们在设置时不需要“$”。例如:a=2然后echo $a。在经典的Windows shell CMD.exe中,文件路径以驱动器号开头,通常为“C:”,变量则用“%”括起来。使用“set”命令进行设置。例如:set a=2然后echo %a%。还有PowerShell,其中变量使用前导“$”符号进行设置:$a=2,它具有许多Linux shell中不存在的命令。Windows10+包括wsl作为Linux shell,可以通过“打开或关闭Windows功能”启用。 - cachius
这个窗口的一些截图可以在这里找到。 - cachius
@cachius 我从Windows+r启动cmd.exe和powershell.exe,为什么会打开Linux shell?我是一个Windows用户,在系统中安装了一些Linux工具。确实,我安装了wsl2,但我没有输入:wsl,其中'uname'报告Linux DESKTOP-18CS814 5.10.102.1-microsoft-standard-WSL2 #1 SMP Wed Mar 2 00:30:59 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux。相反,我的shell报告:MSYS_NT-10.0-19044和MSYS_NT-10.0-19044 DESKTOP-18CS814 3.3.5-341.x86_64 2022-07-08 09:41 UTC x86_64 Msys,我认为这是Windows的shell。 - qknight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接