根据 cmd 条件打开和关闭 windows 设置的程序

根据 cmd 条件打开和关闭 windows 设置的程序

我一直想制作一个 .bat 文件来打开或关闭某些 Windows 设置,以便我可以将其绑定到键盘快捷键。我制作了一个 .bat 文件,它尝试添加注册表项 NoDesktop,以便在运行注册表检查但无法找到键值时隐藏桌面图标,或者在能够找到键值时删除注册表项。

@echo off

REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" 
/v NoDesktop 

if %errorlevel% equ 0 ((
REG DELETE 
"HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v 
NoDesktop /f 
)& echo Registry key deleted, now the desktop icons should be displayed.
(
pause)
 )
else (REG add 
"HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v 
NoDesktop /t REG_DWORD /d 1 /f (
& echo Registry key added, now the desktop icons should be hidden.
))

pause

但是当我运行它时,命令提示符会弹出并立即关闭。我尝试删除所有括号,但它显示一条消息,说未找到注册表项,这很好,应该触发 else 命令,但它没有,它提示我退出。

我做错了什么?我还尝试删除所有 echo 命令,因为我担心 if a then b & c else d & e 在 cmd 中不起作用。但它仍然显示未找到注册表项并提示我退出。我还尝试篡改括号并确保它们都已关闭,但仍然不起作用。

更新:谢谢你,经过谷歌搜索,我已设法修复语法并使 bat 运行良好......但我仍然有几个问题:@echo off

REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" 
/v NoDesktop 2>nul

if %errorlevel% equ 0 (
REG DELETE 
"HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" 
/v NoDesktop /f & echo Registry key deleted, now the desktop icons should be 
displayed. & pause
) else (
REG add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" 
/v 
NoDesktop /t REG_DWORD /d 1 /f & echo Registry key added, now the desktop 
icons should be hidden. & pause
)
  1. 2>nul 是绝对必要的吗?我从这里发现了 https://stackoverflow.com/questions/35458001/check-if-registry-key-value-exists-and-if-so-log-it 他在注册查询的末尾附加了 2>nul,但对于这个人 https://community.spiceworks.com/topic/203455-bat-file-if-reg-key-exists-than-goto 他没有这样做。为什么他的程序没有像我的一样报错并停止运行?

  2. 即使程序运行顺利,并按预期添加和删除注册表项……桌面图标仍然不会隐藏或取消隐藏。添加和删除 Nodesktop 注册表项是我在网上找到的唯一一种从 cmd 启用和禁用桌面图标的方法。因此,我知道的唯一方法是创建一个 .bat 文件并创建一个键盘快捷键,这样我就可以通过键盘输入切换设置。

  3. 使用 cmd 编写程序并不是最愉快的体验。还有其他方法可以编写可以在 Windows 上运行的简单程序,而不必处理过时的 cmd 语言或安装其他语言运行时(如 c++ 或 java)吗?以及如何为像这样的简单功能制作带有基本 GUI 的 .exe?

答案1

我建议你

  • 使用变量作为键,以避免容易出错的冗余
  • 使用有条件执行成功&&或失败||
  • 重定向不需要的输出>NUL 2>&1
  • 将括号的使用限制在绝对必要的范围内

未经测试:

:: Q:\Test\2018\10\17\SU_1367690.cmd
@echo off
Set "Key=HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"

REG QUERY "%Key%" /v NoDesktop >NUL 2>&1 && (
    REG DELETE "%Key%" /v NoDesktop /f >NUL 2>&1
    echo Registry key deleted, now the desktop icons should be displayed.
) || (
    REG Add "%Key%" /v NoDesktop /t REG_DWORD /d 1 /f  >NUL 2>&1
    echo Registry key added, now the desktop icons should be hidden.
)
pause

相关内容