首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用teraterm调用“setexitcode”设置WIndows系统变量%错误级别%需要2个teraterm会话来注册

使用teraterm调用“setexitcode”设置WIndows系统变量%错误级别%需要2个teraterm会话来注册
EN

Stack Overflow用户
提问于 2019-08-26 15:10:06
回答 1查看 377关注 0票数 1

下面的4个文件可以用来演示我看到的问题:(每个文件都简化为可读性)。

tem1.bat:

代码语言:javascript
复制
@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:

代码语言:javascript
复制
@echo off
start /w ttpmacro.exe c:\temp\temp.ttl 1 && if %errorlevel% EQU 0 (echo PASS ) Else ( Echo TIMEOUT )  

注: c:\temp\temp.ttl后面的数字(如这些示例中的10 )。是命令行参数,在脚本中称为param2。

temp.ttl

代码语言:javascript
复制
str2int num param2
setexitcode num  

no_op.ttl

代码语言:javascript
复制
;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%变量:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-26 17:58:26

代码语言:javascript
复制
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有很多项--另一种可以使用的方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57660578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档