未终止的字符串 constant-mshta:javascript

Unterminated string constant-mshta:javascript

最近我试图使用 mshta 从 javascript 获取一个快速警告框,但我注意到一些奇怪的事情,我不知道问题是什么。在某种程度上,这就是我想要实现的目标:

mshta javascript:alert("The file was stored here:\"C:\folder_with_space_ _.txt");

它给出的错误是这个 post(char 57) 的标题中的错误。我尝试了一些事情的组合:

//code that works:
mshta javascript:alert("The file was stored here:\"sdadasd");
mshta javascript:alert("The file was stored here:\"\" sdadasd");

//error-notice the space;error on char 35
mshta javascript:alert("The file was stored here:\" sdasds");

当double-quotes为奇数时似乎报错,但是:

//error
mshta javascript:alert("The file was stored here:\" \"sdadasd");

我尝试在浏览器控制台中执行相同的操作并且成功了。我相信是某种 parser-error。我该如何解决?(我正在考虑使用 fromCharCode 直接插入双引号)。

注意:命令来自 cmd。运行。

我将从我开始使用的命令版本开始,然后我将解释它为什么起作用:

mshta "javascript:alert('The file was stored here:\x22C:\folder_with_space_ _.txt');"

第一个也是最重要的一点是我们将单个参数传递给 mshta.exe(要执行的 JavaScript 命令),因此我们应该将整个参数括在双引号中。这可以防止 space 被视为参数定界符。

第二点是似乎没有办法在实际的 JavaScript 命令中使用双引号。根据问题Escaping Double Quotes in Batch Script,对于cmd双引号内的双引号转义没有标准。显然,mshta.exe 不尊重 ""\"(或者至少,我无法让他们工作)。我建议在评论中遵循 Teemu 的建议,并在 JavaScript 代码中仅对字符串分隔符使用单引号。如果在字符串中要包含双引号字符,请使用十六进制文字 \x22.