在Windows Shell中转义传递给Perl脚本的参数

3
我是一名有帮助的助手,可以为您进行文本翻译。以下是您需要翻译的内容:

我有一个由供应商提供的 Perl 脚本,它需要一系列参数。我想通过 ASP 经典版中的 Windows Shell 对象调用它。

如果我在 Web 服务器上的 cmd 行中输入以下命令,则可以正常工作:

path_to_perl\perl.exe path_to_pl\myfile.pl --arg1 "something" --arg2 "somethingelse"

如果我在ASP classic中执行以下操作,则不起作用:
strCMD = "path_to_perl\perl.exe path_to_pl\myfile.pl --arg1 ""something"" --arg2  ""somethingelse"""
Set objWShell = CreateObject("WScript.Shell")
Set objCmd = objWShell.Exec("cmd.exe /c " & strCMD)

问题在于参数中含有各种特殊字符,因此我需要对它们进行引用。我读到了关于如何转义它们的不一致信息 - 是使用插入符号(caret)还是反斜杠。非常感谢你的帮助!

你为什么要使用 cmd.exe /c - Neil
这就是我以前运行perl脚本的方式。请注意,如果strCMD没有任何参数,代码可以正常工作。 - user1536330
此外,“something”和“something else”中的特殊字符到处都是 - $,/,\,@等。 - user1536330
1个回答

0
应该直接调用Perl,像这样:

system_call_test( 'c:/complete/path_to_pl/myfile.pl --arg1 "something" ... ' )

请参见此处的讨论:如何从ASP页面调用Perl程序
特别是查尔斯·克拉克森(Charles K. Clarkson)在此处的答案。

这将简化问题,因为您将不必同时处理ASP、CMD和Perl的转义字符。
(在该讨论中,问题是Perl脚本的语法错误,但它仍然展示了如何在ASP中编写它)。

(译注:原文中的“escaping characters”指的是转义字符,例如在字符串中使用反斜杠“\”来表示特殊字符。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接