Batch file for循环在批处理中未按预期工作

Batch file for循环在批处理中未按预期工作,batch-file,Batch File,嗨,我是批处理脚本的新手。我一直在尝试将jar文件的输出状态分配给我的heartBeatTime变量。问题是这在cmd中有效。但当我以批处理方式运行时,它根本不起作用。有什么线索吗 set currTimestamp=%date:~10,4%-%date:~4,2%-%date:~7,2% %time:~0,2%-%time:~3,2% set appCount=0 set ids=9516 set trialCount=1 set abortCount=1 :checkPublish for

嗨,我是批处理脚本的新手。我一直在尝试将jar文件的输出状态分配给我的heartBeatTime变量。问题是这在cmd中有效。但当我以批处理方式运行时,它根本不起作用。有什么线索吗

set currTimestamp=%date:~10,4%-%date:~4,2%-%date:~7,2% %time:~0,2%-%time:~3,2%
set appCount=0
set ids=9516
set trialCount=1
set abortCount=1

:checkPublish
for %%f in (10003202 10003207 10003257 10003203 10003232 10003227 10003209 10003213 10003234 10003239 10003240 10003216 10003226 10003238 10003206 10003231 10003252 10003219 10003251) do (
java -jar appPublishCheck.jar %%f >temp
set /p heartBeatTime=<temp
if currTimestamp LEQ heartBeatTime(
set /a appCount=%appCount%+1
)
)
set finalCount=%appCount%
set appCount=0
if %finalCount%==0 goto :wait10
else goto :wait5

:wait10
set /a abortCount=%abortCount%+1
if %abortCount%==25 goto :abort
else(
    ping 1.1.1.1 -n 1 -w 600000 >NUL
    goto :checkPublish
)

:wait5
set /a trialCount=%trialCount%+1
if %trialCount%==4 goto :runATF
else(
    ping 1.1.1.1 -n 1 -w 300000 >NUL
    goto :checkPublish
)

:abort
exit

:runATF
set /a delay=%delay%*60000
ping 1.1.1.1 -n 1 -w %delay% >NUL
cd %IATF_HOME%
set drive=%IATF_HOME:~0,1%
%drive%:
for %%f in (%ids%) do ant runATF -DappID=%%f
set currtimstamp=%date:~10,4%-%date:~4,2%-%date:~7,2%%时间:~0,2%-%time:~3,2%
设置appCount=0
设置ID=9516
设置trialCount=1
设置abortCount=1
:checkPublish
对于%%f in(10003202 10003207 10003257 10003203 10003232 10003227 10003209 10003213 10003234 10003239 10003240 10003216 10003226 10003238 10003206 10003231 10003252 10003219 10003251),请执行以下操作(
java-jar appPublishCheck.jar%%f>temp
设置/p心跳时间=NUL
后藤:检查发布
)
:等待5
设置/a trialCount=%trialCount%+1
如果%trialCount%==4转到:runATF
否则(
ping 1.1.1.1-N1-w 300000>NUL
后藤:检查发布
)
:中止
出口
:runATF
设置/a延迟=%delay%*60000
ping 1.1.1.1-n1-w%延迟%>NUL
cd%IATF\U HOME%
设置驱动器=%IATF\u主驱动器:~0,1%
%驱动器%:
对于(%ids%)中的%%f,执行ant runATF-DappID=%f

您没有在那里使用状态变量-但通常需要延迟扩展来评估循环中的变量

然后将其添加到循环中:

echo "!status!"

我在顶部添加了一行
setlocalenabledelayedexpansion
。还是没用(我不是说使用
status
变量。我在后续代码中使用它。底线是它应该首先创建
temp
文件,它通过cmd执行此操作:(只有在这个循环中出现了一些错误,因为我的批处理在进入这个循环时会退出!删除
>temp
,并在下一行暂停。您让我们猜测会发生什么。还要检查
do(
确实键入为
do(
有空格。我就是这么做的。令人惊讶的是,批处理仍然会失败。我能弄明白的一件事是,如果我不在for循环中使用大括号,只把jar文件的执行部分放在
do
之后,它就工作了。但是,一旦我把jar文件的执行包含在大括号中,批处理就会失败?奇怪..那么你的问题就没有了ng处理
status
变量,询问批处理文件崩溃的原因。您必须将实际代码粘贴到原始问题中-可能您有不平衡的括号。Thanx提供帮助。括号之间的间距是问题所在。:)jar状态现在被重定向到temp文件,除了当我将其传递到
状态
变量时,它不是。批处理控制台显示为:
set/p status=0是否在循环中回显它?您知道您的变量将被设置为java命令行的最后一次调用,并且前面的每一次调用都将被执行丢失-如果这是您正在使用的代码。是的,我正在循环中回显它,并将其递增到另一个全局声明的变量。如果我的值等于某个数字,我就知道我发布了多少应用程序。请参阅上面的代码编辑。您正在询问有关未包含的代码的问题-没有回显com在那里,你刚刚添加了
set/a
行。当你没有给出准确的图片时,你怎么能指望人们帮助你呢?