【发布时间】:2012-05-28 00:59:27
【问题描述】:
我正在为 Windows 编写一个批处理文件并使用命令 7z (7-Zip)。我已将它的位置放在 PATH 中。有没有比较简单的方法来检查命令是否可用?
【问题讨论】:
标签: windows batch-file command
我正在为 Windows 编写一个批处理文件并使用命令 7z (7-Zip)。我已将它的位置放在 PATH 中。有没有比较简单的方法来检查命令是否可用?
【问题讨论】:
标签: windows batch-file command
不执行命令以检查其可用性(即,在PATH 环境变量中找到)。请改用where:
where 7z.exe >nul 2>nul
IF NOT ERRORLEVEL 0 (
@echo 7z.exe not found in path.
[do something about it]
)
>nul 和2>nul 阻止向用户显示where 命令的结果。直接执行程序有以下问题:
您还可以定义一个例程,这可以帮助用户确保他们的系统满足要求:
rem Ensures that the system has a specific program installed on the PATH.
:check_requirement
set "MISSING_REQUIREMENT=true"
where %1 > NUL 2>&1 && set "MISSING_REQUIREMENT=false"
IF "%MISSING_REQUIREMENT%"=="true" (
echo Download and install %2 from %3
set "MISSING_REQUIREMENTS=true"
)
exit /b
然后使用它如:
set "MISSING_REQUIREMENTS=false"
CALL :check_requirement curl cURL https://curl.haxx.se/download.html
CALL :check_requirement svn SlikSVN https://sliksvn.com/download/
CALL :check_requirement jq-win64 jq https://stedolan.github.io/jq/download/
IF "%MISSING_REQUIREMENTS%"=="true" (
exit /b
)
PowerShell:
在PowerShell 上,Get-Command cmdlet 可以被认为等同于 cmd 的where.exe。
Get-Command <cmd>
IF ($? -ne $true)
{
Write-Host "<cmd> not found in path"
# Do something about it
}
【讨论】:
是的:
@echo off
set found=
set program=7z.exe
for %%i in (%path%) do if exist %%i\%program% set found=%%i
echo "%found%"
【讨论】:
set found=?
如果找不到命令,则尝试执行 7z.exe 将返回 9009 的 %errorlevel%。你可以检查一下。
7z.exe
if %errorlevel%==9009 echo Command Not Found
注意:此解决方案适用于这个特定的 7zip 用例,并且可能适用于许多其他用例。但作为一般规则,执行命令以确定它是否存在可能是有害的。因此,请确保您了解执行您正在检查的命令的效果,并使用这种方法自行决定。
【讨论】:
7z.exe >nul 2>&1 | echo Command not found。
delete-hard-drive.bat 来测试它的存在会怎样?
是的,打开一个命令窗口并输入“7z”(我假设这是可执行文件的名称)。如果您收到一条错误消息,指出无法识别命令或操作,那么您就知道路径语句在某处存在问题,否则不会。
【讨论】: