如何在 Openedge 中包含 OS 命令和 Substitute 函数?

How to include OS command with Substitute function in Openedge?

我试图在 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" ').

但是,当我在脚本中包含命令并 运行 它时,我遇到了 错误

这个不行:

define variable cmdcommand as char no-undo. cmdcommand = SUBSTITUTE (' "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"). os-command value(cmdcommand).

我在这里错过了什么?有人可以帮忙吗?

在您的第二个示例中,使用 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"

  • 开头多了一个space
  • 您的 exe 路径的右引号和第一个参数之间没有 space。

这里适合我:

define variable cmdcommand as char no-undo.

cmdcommand = SUBSTITUTE ('"c:\Program Files (x86)\WinMerge\winmergeu.exe" &1 &2',
                          "c:\temp.txt",
                          "c:\temp.txt").

OS-COMMAND silent value(cmdcommand).

由于使用了带占位符的 SUBSTITUTE 函数,这给了我一个干净的命令,在 exe 路径和第一个参数之间有一个 space。

无论有无 SILENT 选项,它都适用。

在与 os-command 斗争了相当长的一段时间后得到了正常的错误并返回了输出,如果您只针对 Windows 那么您可能会发现使用 .Net System.Diagnostics.Process class.

入门指南:

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 class 的其他有用属性包括:

  • 创建无窗口
  • 使用ShellExecute
  • RedirectStandardError
  • RedirectStandardOutput