在批处理的输入参数中转义“双引号”

时间:2012-08-09 23:11:11

标签: windows batch-file

我想在批处理脚本中运行以下命令,它接受一个参数(路径)

runas /user:abc "icacls %1 /grant Everyone:(F) /T"

但是参数%1已经包含"(因为它是一个路径,由上下文菜单的Send To传递 - 我对此没有多少控制权)。 因此,当命令在批处理脚本中运行时,它运行如下:

runas /user:abc "icacls "c:\folder" /grant Everyone:(F) /T"

所以显然我需要逃避"创建的%1。如何对%1执行字符串操作以使其转义引号?

4 个答案:

答案 0 :(得分:25)

您应该可以使用\" Here这是一个包含一些您可能会觉得有用的其他转义字符的网站

执行字符串替换:

set temp=%1
set temp=%temp:"=\"%
echo %temp%

答案 1 :(得分:5)

每个回复都包含部分答案。使用反斜杠和它们组合它们引用:\"你得到:

runas /user:abc "icacls \"%~1\" /grant Everyone:(F) /T"

或者你可以加倍(双)引号来逃避它们:

runas /user:abc "icacls ""%~1"" /grant Everyone:(F) /T"

旁注^偶尔会用于转义特殊字符,例如<|>||&& ,和&例如:

echo ^|

但这很罕见。

答案 2 :(得分:1)

SET myPath=%1
SET myPath=%myPath:"=\"%
runas /user:abc "icacls %myPath% /grant Everyone:(F) /T"

修改 - 变量名称已从path更改为myPath。 PATH是一个保留的系统变量,不应该用于任何其他目的。

答案 3 :(得分:0)

在这种情况下甚至不需要搜索/替换。只需从您的参数中删除原始引号(使用%~1) - 然后您可以再次添加任何内容,例如逃脱的报价。在您的示例中:

runas /user:abc "icacls \"%~1\" /grant Everyone:(F) /T"