【问题标题】:How to execute the choice command but not do anything如何执行选择命令但不执行任何操作
【发布时间】:2020-12-16 16:10:46
【问题描述】:

我的批处理脚本使用了选择命令。在我的脚本中,我想检查choice.exe 是否存在,因为它是具有选择命令的应用程序。

而且我完全知道该怎么做。 通过执行选择命令并使其在失败时退出脚本

choice || goto:nochoiceapp

:nochoiceapp
echo Cannot continue with script
echo Your system doesn't have choice.exe
pause

但我想在脚本开始时执行此操作。不只是在需要选择命令的时候。

我希望它只检查choice.exe 是否存在,而不是实际执行“选择”。这将导致选择提示

如何让它执行选择命令但什么都不做?

【问题讨论】:

  • 你也可以告诉我其他检查choice.exe是否存在的方法
  • 你的方法会失败,因为||之后的代码总是会被执行,因为choice总是设置ErrorLevel;您可以使用where choice > nul 2>&1 && (echo found) || (echo not found) 来确定该命令是否存在……
  • 我测试了我的方法,你说的是真的。但是如果我要使用你的,我现在必须检查 where.exe 是否存在,因为那是具有 where 命令的应用程序。
  • Sean 这是一个很好的观察,特别是因为 where.exe 在 Windows Vista 之前不是内置的,而 choice.exe 是,(尽管由于某种原因它在 Windows 中被排除在外) 2000 和 XP)。但是请注意,Windows 2003 包含choice.exe 和Windows Vista 的所有版本,这些版本是14 年前发布的,因此在某些时候您应该决定不支持使用如此过时且很可能不安全的操作系统的人。

标签: batch-file cmd choice


【解决方案1】:

Choice 是位于 System32 中的常规系统可执行文件。您可以简单地检查文件是否存在。

if not exist "%SystemRoot%\System32\choice.exe" goto :nochoiceapp

【讨论】:

  • 谢谢!我什至不知道 %SystemRoot% 存在
  • 请注意,使用此方法时,您应该在脚本的其余部分中,每次使用该实用程序时也要使用%SystemRoot%\System32\choice.exe。这样做可以防止容易修改变量的潜在问题,因为choice.exe 仍将依赖%Path%,更糟糕的是,choice 将同时依赖%Path%%PATHEXT%
  • 你是说我应该用“%SystemRoot%\System32\choice.exe”代替“choice”这个命令?
  • 是的@SeanArmecin,在我看来,每个人都应该始终使用这种方法,而不是假设没有发生恶意或意外修改。您当然可以自己定义一个变量来包含路径,然后在整个代码中使用该变量,例如Set "Choice=%SystemRoot%\System32\choice.exe",当然还有If Not Exist "%Choice%" GoTo nochoiceapp,以及在未来的命令%Choice% /C …"%Choice%" /C …
【解决方案2】:

这里有一个替代方案,它允许 Microsoft 实用程序 choice.exe 位于当前目录中、%PATH% 中的某个位置,或者在注册表中定义为直接可执行。

choice.exe /D N /T 0 2> NUL 1>&2 & If Not ErrorLevel 2 GoTo nochoiceapp

这个想法是它自动将N输入到默认的[Y,N]?提示符下,这意味着如果ErrorLevel不是2,则可执行文件在任何位置都不存在,或者它确实存在,但不是正确的实用程序。

请注意,对于不使用 N 作为默认“否”选项的语言,您应该相应地更改 N

【讨论】:

  • 您可以使用/c yn使其与语言无关。
  • 感谢@Stephan 提供的附加信息,我知道这是一个附加选项,我想应该提到它。考虑到答案已经被接受,我没有这样做的原因只是为了保持代码足够短以值得发布。
猜你喜欢
  • 1970-01-01
  • 2014-01-23
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多