我正在尝试从jenkins job运行批处理脚本,该脚本有两个msiexec命令,一个用于卸载,另一个用于安装。
这个脚本在github上,所以jenkins工作克隆了repo,然后运行脚本
Jenkins作业开始执行第二个msiexec(安装)命令,但它立即结束。如果我打开作业控制台,我可以看到消息"处理泄露的文件描述符。"和工作状态:成功
如果我通过没有jenkins的cmd运行相同的脚本,它工作正常。
setlocal enabledelayedexpansion
IF EXIST "directory path" (
msiexec /uninstall {Product ID} /qb
)
pushd \\shared drive
IF EXIST "directory path" (
msiexec /i "path to exefile" /qb
popd
exit 0
)
ELSE (
ECHO Setup Not Found in current
exit 0
)
答案 0 :(得分:0)
关键字 ELSE 必须与 IF 条件的TRUE分支的)
位于同一行,该条件与)
之间用空格字符分隔。单独行上的 ELSE 被解释为要运行的控制台应用程序的名称。
if exist "directory path" (
%SystemRoot%\System32\msiexec.exe /uninstall {Product ID} /qb
)
pushd "\\ComputerName\ShareName\"
if exist "directory path" (
%SystemRoot%\System32\msiexec.exe /i "path to exefile" /qb
) else (
echo Setup not found in %CD%.
)
popd
exit /B 0
提示:对于调试批处理文件,在命令提示符窗口中运行它,而不是在删除或注释包含echo off
的所有行后双击它。并且不使用退出而不使用/B
,因为这会导致退出整个命令进程,而不仅仅是退出当前批处理文件的处理。如果批处理文件包含 EXIT 而没有/B
,则在命令提示符窗口中调试批处理文件变得很困难,并且在运行批处理文件时实际执行此命令,因为在运行批处理文件期间输出错误消息在这种情况下无法看到。