【问题标题】:Return value of a REG QUERY cmdREG QUERY cmd 的返回值
【发布时间】:2026-01-31 22:35:01
【问题描述】:

首先抱歉我的英语不好。 我必须检查 uac 是否正在运行。

REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v EnableLUA

此命令在 UAC 未运行时返回 0x0,否则返回 0x1。 但它返回了我仍然不需要的其他无用的东西。

是否有任何可能只将 0x0/0x1 过滤到变量中并将其保存到 txt 文件中?

【问题讨论】:

  • 如果您想知道用户是否具有管理员权限,则在 c:\windows 中创建一个文件,如果成功,他们会这样做,如果失败,他们不会。 echo. >c:\windows\uac.txt && echo Is an Admin || echo Is NOT an Admin.
  • 你为什么用 NSIS 和批处理文件标记这个问题?您需要批处理文件中的答案还是 NSIS 中的答案?
  • 我不知道应该在标签上写什么,仅此而已。我在 NSIS 本身中找到了另一种检查方法。感谢您的帮助:)。
  • 您的问题实际上是,“我怎么知道我是否在提升运行?”,而不是“我如何判断 UAC 是否启用?”因此,您标记的答案实际上不是答案。

标签: batch-file registry uac


【解决方案1】:
for /f "tokens=3" %%a in (
    'REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v EnableLUA'
) do set "UAC=%%a"

> "someFile.txt" echo %UAC%

for /f 将执行命令,读取其输出并使用空格和制表符作为分隔符分割行。我们要求第三个令牌。因为reg 命令的通常输出是

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
    EnableLUA    REG_DWORD    0x1

只有一行包含至少三个标记,因此只会处理这一行。当我们请求第三个令牌时,0x1 存储在分配给%UAC% 变量的for 可替换参数中。

然后,变量的值被回显到指定的文件

【讨论】:

  • 谢谢,这正是我想要的
  • 实际上,这不是您想要的。正如 Anders 所指出的,该注册表值并不能反映当前的 UAC 状态。无论如何,这不是你的问题。您真正想知道的是您是否正在运行提升,而不是是否启用了 UAC。
【解决方案2】:

EnableLUA 不是真正的 UAC 状态,它可能已经过时。如果您在不重新启动的情况下更改 UAC 设置,则 EnableLUA 会给您错误的值。

据我所知,没有记录在案的方法可以获取当前 UAC 状态...

【讨论】: