在Hyperion Interactive Reporting Studio中从Javascript向批处理文件传递参数
在Hyperion Reporting Studio内部,我有一个文档级脚本,希望在其中调用批处理文件并将参数传递给批处理文件 以下是我的代码:在Hyperion Interactive Reporting Studio中从Javascript向批处理文件传递参数,javascript,batch-file,hyperion,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.
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)
此代码不会打开文件,但给出错误消息文件名、目录名或卷标语法不正确。
如果我自己传递Path
,我的bat文件就会运行(因为没有传递任何参数,所以会给我一个警告),并且当我从Shell命令运行相同的代码时,它会正常工作
任何人都可以提供正确语法的见解,以便传递到
Application.Shell
方法中,以便它读取我的参数并将它们传递到批处理文件中吗?我一直在网上上下搜索都没有用。因为var-Attach=“W:\Maughan.xls”
应该是var-Attach=“W:\\Maughan.xls”
在一个字符串中,转义字符\
仅转义下一个字符,因此Attach
将只包含W:Maughan.xls
。要添加\
,您需要使用\
两次
更新:
在这种特殊情况下可能没有区别,因为W:Maughan.xls
意味着在驱动器W
的当前目录中查找Maughan.xls
,这很可能是\
但绝对重要的是围绕主题和主体的参数引用。在您的代码中,构造的命令是
W:\directory\Reference_Files\scripts\vbs\SendEmail.bat my.email@xxx.com My Subject My Body W:Maughan.xls
我确信bat文件无法区分主体和主体(除非它期望每个主体中正好有两个单词),因此正确的命令很可能是
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的回答中得到启发的)因为
var-Attach=“W:\Maughan.xls”
应该是var-Attach=“W:\\Maughan.xls”
在一个字符串中,转义字符\
仅转义下一个字符,因此Attach
将只包含W:Maughan.xls
。要添加\
,您需要使用\
两次
更新:
在这种特殊情况下可能没有区别,因为W:Maughan.xls
意味着在驱动器W
的当前目录中查找Maughan.xls
,这很可能是\
但绝对重要的是围绕主题和主体的参数引用。在您的代码中,构造的命令是
W:\directory\Reference_Files\scripts\vbs\SendEmail.bat my.email@xxx.com My Subject My Body W:Maughan.xls
我确信bat文件无法区分主体和主体(除非它期望每个主体中正好有两个单词),因此正确的命令很可能是
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的回答中得到启发的)试着在变量值的两边加上转义引号。根据目录所在的位置,这可能会有所不同。字符串中的外部引号不包含在JavaScript中的字符串值中。下面是我所说的一个例子:
var Path = "\"W:\\directory\\Reference_Files\\scripts\\vbs\\SendEmail.bat\""
而不是
var Path = "W:\\directory\\Reference_Files\\scripts\\vbs\\SendEmail.bat"
尝试在变量值的任一侧放置转义引号。根据目录所在的位置,这可能会有所不同。字符串中的外部引号不包含在JavaScript中的字符串值中。下面是我所说的一个例子:
var Path = "\"W:\\directory\\Reference_Files\\scripts\\vbs\\SendEmail.bat\""
而不是
var Path = "W:\\directory\\Reference_Files\\scripts\\vbs\\SendEmail.bat"
谢谢你的回复,但这并没有解决问题。另外,由于这是
.bat
文件的一个参数,而不是文件名,我认为它不需要escape\n这个更新的答案让我找到了需要的地方。不过,要注意的是,我还必须将转义\添加到var路径
,就像下面的@impinball-answer一样。@AlexAtNet谢谢!提醒一下,如果不是每个人都映射了相同的驱动器号,您可能希望选择使用UNC路径名。此外,养成将路径名加引号的习惯,否则可能会遇到空格问题,因为如果没有引号,有些东西可能仍然希望使用8.3短名称。感谢您的回复,但这并没有解决问题。另外,由于这是.bat
文件的一个参数,而不是文件名,我认为它不需要escape\n这个更新的答案让我找到了需要的地方。不过,要注意的是,我还必须将转义\添加到var路径
,就像下面的@impinball-answer一样。@AlexAtNet谢谢!提醒一下,如果不是每个人都映射了相同的驱动器号,您可能希望选择使用UNC路径名。另外,养成把路径名放在引号里的习惯,否则你可能会遇到空格的问题,因为如果你没有引号,有些东西可能仍然希望你使用8.3个短名称。+1让我走上正确的方向,尽管这并不能完全解决问题。我知道在这两个答案之间(考虑到当时我不确定我是否能编辑它或不考虑我的声誉),它会出来。+1是为了让我走上正确的方向,尽管它没有完全解决问题。我知道在这两个答案之间(考虑到当时我不确定我是否能编辑它或不考虑我的声誉),它会出来。