微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Openedge 中包含具有 Substitute 功能的 OS 命令?

如何解决如何在 Openedge 中包含具有 Substitute 功能的 OS 命令?

我正在尝试通过 OpenEdge 中的 OS-Command 创建 PDF,但在运行脚本时遇到错误

*错误命令“C:\Program”拼写错误或找不到

它完美地工作:

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 举报,一经查实,本站将立刻删除。