如何解决如何在 Openedge 中包含具有 Substitute 功能的 OS 命令?
我正在尝试通过 OpenEdge 中的 OS-Command 创建 PDF,但在运行脚本时遇到错误。
它完美地工作:
os-command (' "C:\Program Files (x86)\wkhtmltopdf\wkhtmltopdf.exe" "V:\V11\WEB\PDF\Name_01.03.2021_14.09.30_da.html" "V:\V11\WEB\PDF\Name_01.03.2021_14.09.30_da.pdf"').
但是,当我在脚本中包含命令并运行它时,我遇到了错误。
这个不行:
将变量 cmdcommand 定义为 char no-undo。 cmdcommand = 替换
(' "C:\Program Files (x86)\wkhtmltopdf\wkhtmltopdf.exe"
"V:\V11\WEB\PDF\Name_&1_&2_&3.html"
"V:\V11\WEB\PDF\Name_&1_&2_&3.pdf" ',"01.03.2021","14.09.30","da")。
操作系统命令值(cmdcommand)。
我在这里错过了什么?有人可以帮忙吗?
解决方法
在使用 os-command
进行了相当长的一段时间以获取正常错误并返回输出之后,如果您只针对 Windows,那么您可能会发现使用 .Net System.Diagnostics.Process 类更容易。
让您开始:
define variable oProcess as System.Diagnostics.Process no-undo.
define variable oInfo as System.Diagnostics.ProcessStartInfo no-undo.
oProcess = new System.Diagnostics.Process().
assign
oInfo = oProcess:StartInfo
oInfo:FileName = "C:~\Program Files (x86)~\winmerge~\winmergeu.exe".
oInfo:WorkingDirectory = "session:temp-directory
oInfo:Arguments = substitute(
"&1 &2",quoter( "file1.txt" ),quoter( "file2.txt" )
)
.
oProcess:Start().
oProcess:WaitForExit().
ProcessStartInfo 类的其他有用属性包括:
- 创建无窗口
- UseShellExecute
- 重定向标准错误
- 重定向标准输出
在您的第二个示例中,使用 SUBSTITUTE 没有任何价值,因为您没有使用占位符(&1、&2、...)。您所做的基本上是一个简单的字符串分配。
结果字符串如下所示:
"C:\Program Files (x86)\wkhtmltopdf\wkhtmltopdf.exe""V:\V11\WEB\PDF\Name_01.03.2021_14.09.30_da.html""V:\V11\WEB\PDF\Name_01 .03.2021_14.09.30_da.pdf"
- 开头多了一个空格
- 在 exe 路径的右引号和第一个参数之间没有空格。
这对我有用:
define variable cmdcommand as char no-undo.
cmdcommand = SUBSTITUTE ('"c:\Program Files (x86)\WinMerge\winmergeu.exe" &1 &2',"c:\temp\1.txt","c:\temp\2.txt").
OS-COMMAND silent value(cmdcommand).
由于使用带有占位符的 SUBSTITUTE 函数,这给了我一个干净的命令,在 exe 路径和第一个参数之间有一个空格。
无论是否使用 SILENT 选项都可以使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。