batch-file - 如何将 html 作为参数传递给批处理程序?

标签 batch-file cmd

我的目标/问题

以下批处理程序可用于显示我的问题:

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.phphttp://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/

相关文章:

windows - 使用批处理文件复制命令提示符

batch-file - 批处理 - 如何在脚本中读取另一个命令行函数的输出?

windows - %variable% 和 !variable! 之间的区别在批处理文件中

cmd - 使用 dcu-cli.exe 在远程系统上安装戴尔更新

batch-file - Windows 批处理文件中的单引号有什么作用?

windows - 如何检查批处理文件中是否存在变量?

batch-file - 批处理 - 计算当前文件夹和子文件夹中文件的行数

java - 批处理文件如何接受 Java 的参数?

windows - 在cmd中重命名多个文件

npm - Electron抛出了编译错误,并且Windows命令提示符变为不可写