以下 4 个文件可用于演示我看到的问题:(为了便于阅读,每个文件都进行了简化。)
temp1.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 )
temp2.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 后面的数字(例如这些示例中的 a1或。)是命令行参数,an在脚本 0中称为param2 。
临时文件
str2int num param2
setexitcode num
no_op.ttl
;Do nothing
num = 0
从 Windows CMD 提示符运行 temp1.bat,比较语句每次都会产生预期的响应,始终如一。
从 Windows CMD 提示符运行 temp2.bat,比较语句的结果在第一次运行后始终是意外的,但在第二次调用时会产生预期的结果。
我遇到的问题是,在退出 teraterm 脚本的单个实例时,Windows 似乎没有将该值注册到其 %errorlevel% 变量中。no-op.ttl在更新 %errorlevel% 变量之前, 我必须运行一个子序列脚本(例如),并且比较测试会产生预期的结果。
有人可以确定在运行 Tera Term 脚本的单个实例后如何正确更新 Windows %errorlevel% 变量吗?
有关 Tera Term 脚本和批处理文件中关键项目的其他信息:
用法 - TTPMACRO
setexitcode(来自 Tera Term API 参考文档。)使脚本能够将值返回给调用进程,例如在本例中为 CMD 窗口。我正在使用此返回值在 Windows 中确定所有内部脚本步骤均已正确执行。(除此问题所必需的那些行外,所有行都已删除。)
并且,错误级别的使用信息说明:
检查错误级别的首选方法是使用 %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