我如何在 WinCC OA 中将 system() 与 rxrepl 一起使用?
How can i use system() with rxrepl in WinCC OA?
我尝试使用:
string result;
string path = "C:/winccoa.projects/filters/bin/tools/rxrepl.exe";
string cmd = "'opcki' | " + path + " -s 'op' -r 'tata'";
system(cmd, result);
DebugN(result);
但在 LogViewer 中我什么也没看到,而是 ["tatacki"]
为什么?我做错了什么?
在 PowerShell 中运行良好:
PS C:\> 'opcki' | C:/winccoa.projects/filters/bin/tools/rxrepl.exe -s "op" -r "tata"
tatacki
我假设 WinCC 的 system()
函数的目标是 cmd.exe
,而不是 powershell.exe
(这是典型的,因为历史上 cmd.exe
一直是默认值 shell,API不太可能改变,以保持向后兼容性)。
因此,为 cmd.exe
制定命令:
string cmd = "echo opcki | " + path + " -s op -r tata";
不是使用 echo
生成输出和省略单引号 ('...'
),cmd.exe
无法识别。
如果需要 embedded 引用,则必须在 "..."
PowerShell 字符串中使用 `"
(或使用 '...'
PowerShell 字符串(其内容按字面意思)并嵌入 "
个字符。按原样)。
我尝试使用:
string result;
string path = "C:/winccoa.projects/filters/bin/tools/rxrepl.exe";
string cmd = "'opcki' | " + path + " -s 'op' -r 'tata'";
system(cmd, result);
DebugN(result);
但在 LogViewer 中我什么也没看到,而是 ["tatacki"]
为什么?我做错了什么?
在 PowerShell 中运行良好:
PS C:\> 'opcki' | C:/winccoa.projects/filters/bin/tools/rxrepl.exe -s "op" -r "tata"
tatacki
我假设 WinCC 的 system()
函数的目标是 cmd.exe
,而不是 powershell.exe
(这是典型的,因为历史上 cmd.exe
一直是默认值 shell,API不太可能改变,以保持向后兼容性)。
因此,为 cmd.exe
制定命令:
string cmd = "echo opcki | " + path + " -s op -r tata";
不是使用 echo
生成输出和省略单引号 ('...'
),cmd.exe
无法识别。
如果需要 embedded 引用,则必须在 "..."
PowerShell 字符串中使用 `"
(或使用 '...'
PowerShell 字符串(其内容按字面意思)并嵌入 "
个字符。按原样)。