下面的4个文件可以用来演示我看到的问题:(每个文件都简化为可读性)。
tem1.bat:
@echo off
start /w ttpmacro.exe c:\temp\temp.ttl 0
start /w ttpmacro.exe c:\temp\no_op.ttl && if %errorlevel% EQU 0 (echo PASS ) Else ( Echo TIMEOUT )tem2.bat:
@echo off
start /w ttpmacro.exe c:\temp\temp.ttl 1 && if %errorlevel% EQU 0 (echo PASS ) Else ( Echo TIMEOUT ) 注: c:\temp\temp.ttl后面的数字(如这些示例中的1或0 )。是命令行参数,在脚本中称为param2。
temp.ttl
str2int num param2
setexitcode num no_op.ttl
;Do nothing
num = 0 在Windows提示符中运行tem1.bat,比较语句每次都会得到预期的响应。
在Windows提示符中运行tem2.bat,在第一次运行后,比较语句结果始终是出乎意料的,但当第二次调用时,则会产生预期的结果。
我遇到的问题是,在退出teraterm脚本的单个实例时,Windows似乎没有将值注册到其%errorlevel%变量中。我必须运行一个最后续的脚本。no-op.ttl),在更新%错误级%变量之前,比较测试将得到预期的结果。
有人能确定在运行Tera术语脚本的单个实例后,如何正确地更新Windows %错误级%变量吗?
关于Tera术语脚本和批处理文件中关键项的其他信息:
用法- https://ttssh2.osdn.jp/manual/en/macro/commandline.html
https://ttssh2.osdn.jp/manual/en/macro/command/setexitcode.html (来自Term参考文档)。使脚本能够返回一个值到调用进程,例如在这种情况下是一个CMD窗口。我使用此返回的值在Windows中确定所有内部脚本步骤都已正确执行。(除对此问题至关重要的所有行外,所有行都已删除。)
而且,关于https://ss64.com/nt/errorlevel.html的使用信息是:
检查错误级别的一种首选方法是使用%ERRORLEVEL%变量:
IF %ERRORLEVEL% NEQ 0 Echo An error was found
IF %ERRORLEVEL% EQU 0 Echo No error found
IF %ERRORLEVEL% EQU 0 (Echo No error found) ELSE (Echo An error was found)
IF %ERRORLEVEL% EQU 0 Echo No error found || Echo An error was found发布于 2019-08-26 17:58:26
start /w ttpmacro.exe c:\temp\temp.ttl 1 && if errorlevel 1 (echo TIMEOUT ) Else ( Echo PASS ) 当cmd解析一个代码块时,它会用该变量的当前值替换任何%var%,然后执行该代码。
因此,%errorlevel%将被上一次运行返回的值替换。
这是使用errorlevel - IF ERRORLEVEL n的传统方法,如果运行时(即.errorlevel为n或大于n。因此,IF ERRORLEVEL 0总是正确的。IF NOT ERRORLEVEL 1是errorlevel=0的一个测试。IF %ERRORLEVEL%==0也是如此,只不过前者可以在块内使用,而后者不能。
关于delayedexpansion有很多项--另一种可以使用的方法。
https://stackoverflow.com/questions/57660578
复制相似问题