Batch file Jenkins批处理文件错误级别未更改
在我获得否决票之前,我已经检查了现有的链接,如:但无法复制修复。我主要有两个问题: 第一名: 所以我的剧本是:Batch file Jenkins批处理文件错误级别未更改,batch-file,uwp,jenkins-plugins,psexec,windows-task-scheduler,Batch File,Uwp,Jenkins Plugins,Psexec,Windows Task Scheduler,在我获得否决票之前,我已经检查了现有的链接,如:但无法复制修复。我主要有两个问题: 第一名: 所以我的剧本是: setlocal ENABLEDELAYEDEXPANSION REM Installing the application "%PSTOOLLOCATION%\PsExec.exe" \\%HOSTNAME% cmd /c schtasks /run /TN %SCHEDULEDINSTALLERTASKNAME% REM Waiting for i
setlocal ENABLEDELAYEDEXPANSION
REM Installing the application
"%PSTOOLLOCATION%\PsExec.exe" \\%HOSTNAME% cmd /c schtasks /run /TN %SCHEDULEDINSTALLERTASKNAME%
REM Waiting for installation to complete
:loop
%PSTOOLLOCATION%\PsExec.exe \\%HOSTNAME% cmd /c schtasks /Query /tn %SCHEDULEDINSTALLERTASKNAME% /fo table /nh | find "Ready"
echo !ERRORLEVEL!
echo %ERRORLEVEL%
echo ERRORLEVEL
IF !ERRORLEVEL!==1 (
echo "Installation in progress"
goto :loop
) ELSE (
echo "Installation complete"
)
无论我是否启用/禁用setlocal命令,输出总是“1”。
我能看到的环境中唯一的变化是引入了另一个UWP表面(主机名),它通过jenkins slave连接
我希望在每次循环运行中更新状态
秒:
获取任务调度程序完整状态的命令仅给出第一行作为输出:
命令:
cmd /c "%PSTOOLLOCATION%\PsExec.exe \\%HOSTNAME% cmd /c schtasks /query /tn %SCHEDULEDINSTALLERTASKNAME% /fo list" > status.txt
预期产出:
Folder: \
HostName: CTSURFACE1
TaskName: \TASKNAME
Next Run Time: N/A
Status: Ready
Logon Mode: Interactive/Background
收到的输出:
Folder: \
只有在jenkins中通过批处理文件(run.bat)运行该命令时,才可以复制该命令。如果我在jenkins作业的批处理部分中展开此命令,则效果良好。是否有任何打开的错误?首先,在命令提示窗口中运行
if/?
,您可以在输出帮助中阅读if errorlevel X
语法,这意味着命令/应用程序的退出代码是否大于或等于X。if errorlevel X
或相反if not errorlevel X
(低于X)在MS-DOS之后的任何地方都可以工作,即使在命令块中也不使用延迟扩展,因此应始终使用,而不是if%ERRORLEVEL%==X
或if!错误级别!==X
。谢谢Mofi。但问题不在于这里的情况。实际问题在于ERRORLEVEL的值。循环从不改变错误级别,而在机器上,状态已经改变。第二,真正的问题。您希望| find“Ready”
会处理schtasks
的输出。事实并非如此<代码>查找在处理PsExec输出的本地计算机上执行。您必须使用^
转义重定向操作符|
,以便在运行整个PsExec命令行之前,首先在cmd.exe上将其解释为文字字符,即使用^查找“Ready”
。是。这解决了我的问题。非常小的错误!:)status.txt问题的任何输入?您也不需要使用PSEXEC
查询其他计算机SCHTASKS
可以选择指定要查询的计算机。