首页 > 解决方案 > 使用带有系统限制的 cmd 错误代码

问题描述

系统限制说明:
我使用的是plc-functionblock NT_StartProcess来使用cmd.exe,但是由于使用functionblock有一些限制因素:需要调用一个可执行文件(可以调用其他的,如cmd.exe),命令的最大字符串大小为255并且命令需要在一行中/不能分成2个命令。如果调用了 cmd.exe 或 powershell.exe,则需要在执行后关闭它们(例如在 cmd 中使用 /C)。

我正在调用一个可执行文件,并将返回的错误代码存储在 .txt 文档中。我想复制以下 2 个命令的行为:

C:\RootFolder> Testexecutable.exe --Testparameters
 ...Testexecutable.exe is doing sth
C:\RootFolder> echo %ERRORLEVEL% > Testfile.txt

这始终具有正确和预期的行为。现在,由于系统限制,这两个命令必须结合起来。我给功能块的可执行路径可以是cmd或powershell,但不能是Testexecutable.exe,因为可以给Testexecutable.exe的唯一参数会改变行为,但不能处理输出,因此我无法访问错误代码。

我无法使用类似的东西

    cmd.exe /C "Testexecutable.exe --Testparameters & echo %ERRORLEVEL% > Testfile.txt"

因为在 cmd.exe 被调用之前 %ERRORLEVEL% 的先前值被保存。


例如:

C:RootFolder> cd
C:RootFolder>
C:RootFolder> echo %ERRORLEVEL%
0
C:RootFolder> cmd.exe /C "Testexecutable.exe --Testparameters & echo %ERRORLEVEL% > Testfile.txt"

在本例中,0 保存在 Testfile.txt 中。其他示例:

C:RootFolder> cd t
Can't find path...
C:RootFolder> echo %ERRORLEVEL%
1
C:RootFolder> cmd.exe /C "Testexecutable.exe --Testparameters & echo %ERRORLEVEL% > Testfile.txt"

在本例中,1 保存在 Testfile.exe 中。


-> %ERRORLEVEL% 在调用 Testexecutable.exe 之前被其整数值替换。示例中的假定输出始终为 5。

有没有办法将 %ERRORLEVEL% 的替换“延迟”到执行前一个命令之后?还有另一种方法来获取可执行文件的错误代码吗?

在Mofi指出替换 %ERRORLEVEL% 的行为之前,我之前认为这是一个时间问题(上一个问题) 。

标签: cmdplc

解决方案


推荐阅读