从Hyperion Interactive Reporting Studio内部的Javascript传递参数到批处理文件

时间:2013-11-14 21:51:39

标签: javascript batch-file hyperion

Hyperion Reporting Studio内部我有一个文档级脚本,我希望调用批处理文件并将参数传递给批处理文件。

这是我的代码:

var Path = "W:\\directory\\Reference_Files\\scripts\\vbs\\SendEmail.bat"
var Email = "my.email@xxx.com"
var Subject = "My Subject"
var Body = "My Body"
var Attach = "W:\Maughan.xls"

Application.Shell(Path + " " + Email + " " + Subject + " " + Body + " " + Attach)

此代码不会打开文件,但会显示错误消息The filename, directory name, or volume label syntax is incorrect.

如果我自己传递Path我的bat文件运行(因为没有参数传递给我一个警告),而且当我从Shell命令运行相同的代码时,它运行完美。

任何人都可以提供任何有关传递到Application.Shell方法的正确语法的见解,以便它读取我的参数并将它们传递给批处理文件吗?我一直在网上搜索高低无济于事。

2 个答案:

答案 0 :(得分:2)

因为var Attach = "W:\Maughan.xls"应为var Attach = "W:\\Maughan.xls"

在字符串中,转义字符\只会转义下一个字符,因此Attach只包含W:Maughan.xls。要添加\,您需要使用\两次。

<强>更新

在这种特定情况下可能没有区别,因为W:Maughan.xls表示在驱动器Maughan.xls上的当前目录中查找W,这很可能是\

但绝对重要的是参数Subject和Body的引用。在您的代码中,构造的命令是

W:\directory\Reference_Files\scripts\vbs\SendEmail.bat my.email@xxx.com My Subject My Body W:Maughan.xls

我确定蝙蝠文件无法区分主体和身体(除非它期望每个中只有两个单词)所以正确的命令很可能是

W:\directory\Reference_Files\scripts\vbs\SendEmail.bat my.email@xxx.com "My Subject" "My Body" W:\Maughan.xls

您可以通过在cmd中运行上面的命令来检查它。

要构建它,参数应修改如下:

var Path = "W:\\directory\\Reference_Files\\scripts\\vbs\\SendEmail.bat"
var Email = "my.email@xxx.com"
var Subject = "\"My Subject\""
var Body = "\"My Body\""
var Attach = "W:\\Maughan.xls"

(这次修正的灵感来自impinball的回答)

答案 1 :(得分:2)

尝试在变量值的任一侧放置转义引号。根据目录的位置,这可能会有所不同。字符串中的外部引号不包含在JavaScript中的字符串值中。这是我正在谈论的一个例子:

var Path = "\"W:\\directory\\Reference_Files\\scripts\\vbs\\SendEmail.bat\""

而不是

var Path = "W:\\directory\\Reference_Files\\scripts\\vbs\\SendEmail.bat"