例如,在 Windows 7 上 mklink 可从 cmd.exe /C mklink 获得,但在 Windows XP 上则不然。

除了执行 cmd.exe /C mklink 并尝试读取 errorlevel 之外,是否有更简单的方法来测试 cmd.exe 是否支持命令?

谢谢!

最佳答案

ERRORLEVELcmd 不是命令存在的好指标,因为如果命令不存在或失败,它会被设置为非零值,这可能会使您的测试失败。

或者,您可以执行以下操作之一:

检查操作系统版本

就像阿德里亚诺在评论中建议的那样,可以像这样检查 Windows 的版本:

set mklink_supported=true
ver | find "XP" >nul 2>&1 && set mklink_supported=false

或者像这样:
set mklink_supported=false
echo %vers% | find "Windows 7" >nul 2>&1 && set mklink_supported=true

然后:
if %mklink_supported%==false (
    echo 'mklink' is not supported on this operating system.
)

或类似的东西。不过,您需要确保处理所有必要的操作系统版本。

测试运行命令并检查 ERRORLEVEL
或者,您可以尝试直接运行 mklink。如果未找到,则将 ERRORLEVEL 设置为 9009 :
@echo off
mklink >nul 2>&1
if errorlevel 9009 if not errorlevel 9010 (
    echo 'mklink' is not supported on this operating system.
)

请注意,有两个 if 语句。如果 if errorlevel 9009 >=9009,则 ERRORLEVEL 有效,因此需要第二个 if -语句来排除 ERRORLEVEL >9009 的情况)。

我更喜欢第二种解决方案,因为它预计适用于所有版本的 Windows。

关于batch-file - 如何测试cmd.exe命令是否存在?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12624044/

10-11 07:07