我的目标/问题
以下批处理程序可用于显示我的问题:
echo first param: %1 third param: %3
echo '%2'
我的目标是获得 param2 的以下输出(我知道作为最后一个参数会更容易一些,但这不是所需要的):
'<body><p style="font-familiy:Arial,Cascadia">MyText</p></body>'
我的问题是如何正确调用它或更改cmd代码,以便第二个参数不被解释为多个参数
第一次尝试:反斜杠作为转义字符
如果我像这样用反斜杠转义双引号:
demo p1 "<body><p style=\"font-family:Arial,Cascadia\">MyText</p></body>" p3
param2 的输出是
''"<p style="font-family:Arial'
其余 HTML 代码位于 param3 中。
第二次尝试:双双引号作为转义字符
我的第二次尝试是用双引号转义:
demo p1 "<body><p style=""font-family:Arial,Cascadia"">MyText</p></body>" p3
这会为 param2 生成以下输出,其中双引号根本没有更改:
"'<body><p style=""font-family:Arial,Cascadia"">MyText</p></body>'"
丑陋的解决方法
我设法通过将“”替换为“来获得所需的输出,如下所示:
set x=%2
echo '%x:""="%'
我想知道这是否是推荐的方法,或者是否有更简单的方法。我读了很多关于这个主题的书 与 https://www.robvanderwoude.com/escapechars.php和 http://www.windowsinspired.com/understanding-the-command-line-string-and-arguments-received-by-a-windows-program/被最常引用,但不幸的是两者都没有帮助。
最佳答案
如前所述,只能使用双引号来转义完整参数,但引号本身不能在参数内转义。
如果您仍然坚持在参数中使用双引号,那么双双引号似乎是最好的解决方案之一。
但是为了以安全的方式获取和处理参数,您应该切换到延迟扩展,因为延迟扩展的内容不再被解析(与百分比扩展相反)。
set "arg1=%~1"
set "arg2=%~2"
..
setlocal EnableDelayedExpansion
set "arg1=!arg1:""="!"
set "arg2=!arg2:""="!"
echo !arg1! !arg2!
关于batch-file - 如何将 html 作为参数传递给批处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65104867/