【问题标题】:how do I retrieve a value after using setx?使用 setx 后如何检索值?
【发布时间】:2014-06-05 11:43:08
【问题描述】:

我需要存储一个值(时间戳)并稍后在批处理文件中检索它。所以我搜索了关于如何存储持久变量的答案并找到了 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%

如何找回我的储值?

【问题讨论】:

  • 使用setx 命令对您来说很重要吗?我的意思是可以改用set
  • 是的,就我而言,我希望该值保持不变:o

标签: windows batch-file


【解决方案1】:

来自文档 (setx /?)

因为 SETX 将变量写入主环境 注册表,编辑只会在新的命令窗口出现时生效 打开 - 它们不会影响当前的 CMD 或 PowerShell 会话。

【讨论】:

  • 啊....是的,确实有效:),当我关闭我的 CMD 并打开一个新的 CMD 时,它可以工作 - 这就是我真正想要的,非常感谢。
  • 特别是,如果您使用set setx,您已经涵盖了所有情况。请注意,setx 可能偶尔会挂起,因为其他进程无法正确响应广播消息。如果这是一个问题,您可能需要考虑将数据存储在文件中。
【解决方案2】:

使用 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

结果:

 :: 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 2012-09-04
    相关资源
    最近更新 更多