2012-05-21 101 views
6

我正在为Windows编写批处理文件并使用命令7z(7-Zip)。我已将它的位置放在PATH中。有没有一种比较简单的方法来检查命令是否可用?检查命令是否在批处理文件中可用

+0

不要执行。IMO的最佳方式是:http://stackoverflow.com/a/27014081/1724702 –

回答

1

如果未找到该命令,则尝试执行7z.exe将返回9009的%errorlevel%。你可以检查。

7z.exe 
if %errorlevel%==9009 echo Command Not Found 
+0

更好的方法是'7z.exe> nul 2>&1 |回声命令找不到',我猜。 – Joey

+0

IMO的最佳方式是:http://stackoverflow.com/a/27014081/1724702 –

-1

是的,打开命令窗口并输入“7z”(我假设这是可执行文件的名称)。如果你得到一个错误,说明命令或操作没有被识别,那么你知道路径语句在某处存在问题,否则它不会。

1

是啊,

@echo off 
set found= 
set program=7z.exe 
for %%i in (%path%) do if exist %%i\%program% set found=%%i 
echo "%found%" 
+0

这不适用于包含空格的引用路径。 – Joey

+0

谢谢,你为什么说'set found ='? – rynd

+0

@Joey有一个简单的解决方案。使用双引号。然而,如果在接受的解决方案中没有指定命令的扩展名(exe,bat),这将无法正常工作。 – khattam

16

建议执行命令来检查它是否可以使用(比方说,可以在PATH环境变量)。因此,我认为最好的办法是使用where命令:

where 7z.exe >nul 2>nul 
if %errorlevel%==1 (
    @echo 7z.exe not found in path. 
    [do something about it] 
) 

>nul2>nul是可选的;此处用于防止显示由where命令生成的标准输出和标准错误输出。

更新:为什么你可能不希望执行:0​​

  1. 你可能不会真的不知道该程序的功能
  2. 程序可能有副作用 - 它可能会做一些事情,你知道,但不想 - 比如删除文件,重新缓存等
  3. 程序可资源密集型/慢

问题是要确定程序是否可用,所以你应该检查相同。

+1

投注'IF'条件:'IF NOT ERRORLEVEL 0'。参见['IF'](http://ss64.com/nt/if.html)。 – jpmc26

+1

你为什么不建议执行它?这是一般还是在这种特殊情况下? – quimnuss

+2

很多不执行的原因:副作用,你可能不知道程序做了什么,程序可能是资源密集型/慢速等等。 –

相关问题