未终止的字符串常量-mshta:javascript

问题描述:

最近我试图从javascript中使用mshta获得一个快速警报框,但我注意到一些奇怪的东西,而且我没有ideea是什么问题。这一点,在某种程度上,我一直在努力实现:未终止的字符串常量-mshta:javascript

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

它给人的错误是一个在这篇文章的标题(炭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"); 

它看起来像它给错误时,双引号数量为奇数,但:

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

我试图做同样的在浏览器的控制台和它的工作。我相信是某种解析器 - 错误。我该如何解决它?(我正在考虑使用fromCharCode直接插入双引号)。

注意:命令从cmd运行。

+0

命令行中的反斜杠并不像JS中的转义字符。在字符串中使用单引号。 – Teemu

我也有我的工作的命令的版本开始,我会解释为什么它的工作原理:

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

首先也是最重要的一点是,我们传递一个mshta.exe(要执行的JavaScript命令)的单个参数,所以我们应该用双引号括住整个参数。这可以防止空间被视为参数分隔符。

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