用于检查和更改注册表值的批处理文件

问题描述 投票:0回答:1

我希望我的组织使用 Windows Server 2019 具有的默认“打印屏幕”。
我的意思是,当用户按下 PrtScn 按钮时,它将显示并使用默认的“截图工具”。

我的意思是,对于那个工具:

隐藏在这里:

现在,我想使用批处理脚本(将在用户登录时启动)来检查是否在

HKEY_CURRENT_USER\Control Panel\Keyboard

PrintScreenKeyForSnippingEnabled
中,值设置为
0

如果是,那么它会将值更改为

1

如果它已经打开了
1
,那么它将什么也不做。

所以我想到了类似的事情:

reg query HKEY_CURRENT_USER\Control Panel\Keyboard 
if %ERRORLEVEL% EQU 0 goto reg add "HKEY_CURRENT_USER\Control Panel\Keyboard" /v "PrintScreenKeyForSnippingEnabled" /t REG_DWORD /d 1 /f || goto end

但无法让它工作。

我的代码有什么问题吗?

batch-file cmd server registry
1个回答
1
投票

命令行

reg query HKEY_CURRENT_USER\Control Panel\Keyboard

输出错误信息:

错误:语法无效。
输入“REG QUERY /?”供使用。

原因是注册表键名中存在空格字符,需要将整个键名用双引号引起来。

reg query "HKEY_CURRENT_USER\Control Panel\Keyboard"

但是该查询只是检查密钥

HKEY_CURRENT_USER\Control Panel\Keyboard
是否存在,并默认列出该注册表项的所有值。它不会检查现有的注册表项是否还有一个名为
PrintScreenKeyForSnippingEnabled
的值,该值是一个双字值,并且具有值
1

但是,实际上双字值是否已经存在以及已经存在时它的值是什么并不重要。无论如何,目标是双字值最终出现在当前用户的注册表中,且值为

1
。因此根本不需要额外的步骤,只需

%SystemRoot%\System32\reg.exe add "HKEY_CURRENT_USER\Control Panel\Keyboard" /v "PrintScreenKeyForSnippingEnabled" /t REG_DWORD /d 1 /f >nul

此命令将在尚不存在时创建注册表项

Control Panel
,在尚不存在时创建子项
Keyboard
,在尚不存在时将值
PrintScreenKeyForSnippingEnabled
创建为双字值,且值为
1

如果名称为
PrintScreenKeyForSnippingEnabled
的双字值已存在且具有不同值,则现有值将替换为值
1

如果已经存在名称为
PrintScreenKeyForSnippingEnabled
的不同类型(如
REG_SZ
)的值,则该命令将删除错误类型的现有值,然后重新创建类型为
REG_DWORD
、值为
1
的值。

该命令仍然可能因缺少写入访问权限而失败,但这在这里不太可能,因为这需要用户或之前执行的脚本修改此密钥的权限。

我建议打开命令提示符,首先运行

reg /?
并阅读简短的输出帮助,接下来运行
reg query /?
并阅读较长的输出帮助,最后运行
run reg add /?
并再次阅读整个输出帮助。

© www.soinside.com 2019 - 2024. All rights reserved.