我想写一个批处理文件来静默安装Perl MSI。但是,服务器/ PC可能安装了Perl,批处理文件的流程将为:
我知道如果安装了Perl,命令perl-v
会报告Perl版本,但是不知道如何通过Windows批处理文件检查perl
命令是否可以在服务器/ PC上执行。< / p>
答案 0 :(得分:3)
也许How do I get the application exit code from a Windows command line?和Redirect Windows cmd stdout and stderr to a single file可能会对您有所帮助。
运行
perl -e1 2>NUL
if errorlevel 1 (
echo Perl is not installed
)
perl -e1
只是执行Perl表达式1
作为单行程序,如果安装了Perl,它总是成功的。它根本不产生任何输出,除非它在没有找到Perl时抱怨。这就是为什么我将STDERR重定向到NUL所以你不会看到任何输出,甚至不会看到错误消息。
if errorlevel 1
检查最后一个命令(本例中为perl -e1
)的返回码是否为>=1
。如果Perl已安装且可执行,则其返回码将为0
(表示成功),if
将不会触发。
你也可以使用perl -v
但 在STDOUT上产生输出。在这种情况下,您必须将STDOUT和STDERR重定向到NUL,如下所示:perl -v >NUL 2>&1
。
答案 1 :(得分:0)
>nul 2>nul where perl || echo not installed
这会检查perl而不尝试运行perl。
如果在%PATH%中列出的文件夹中找到文件/命令,则打印到STDOUT,如果没有,则打印到STDERR。