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
方法的正确语法的见解,以便它读取我的参数并将它们传递给批处理文件吗?我一直在网上搜索高低无济于事。
答案 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"