我想在批处理脚本中运行以下命令,它接受一个参数(路径)
runas /user:abc "icacls %1 /grant Everyone:(F) /T"
但是参数%1
已经包含"
(因为它是一个路径,由上下文菜单的Send To传递 - 我对此没有多少控制权)。
因此,当命令在批处理脚本中运行时,它运行如下:
runas /user:abc "icacls "c:\folder" /grant Everyone:(F) /T"
所以显然我需要逃避"
创建的%1
。如何对%1
执行字符串操作以使其转义引号?
答案 0 :(得分:25)
答案 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"