[英]Escape “double quotes” inside batch's input parameters
我想在批处理脚本中运行以下内容,它需要一个参数(路径)
runas /user:abc "icacls %1 /grant Everyone:(F) /T"
但是参数%1
已经包含一个"
(因为它是一个路径,由上下文菜单传递给Send To传递 - 我对此没有多少控制权。)所以当命令在批处理脚本中运行时,它运行如下:
runas /user:abc "icacls "c:\folder" /grant Everyone:(F) /T"
所以,很显然,我需要逃脱"
通过创建小号%1
。如何在执行字符串操作%1
,使得它逃过了引号?
每个回复都包含部分答案。 使用反斜杠和引号组合它们: \\"
你得到:
runas /user:abc "icacls \"%~1\" /grant Everyone:(F) /T"
或者你可以加倍(双)引号来逃避它们:
runas /user:abc "icacls ""%~1"" /grant Everyone:(F) /T"
作为附注, ^
偶尔用于转义特殊字符,例如<
, |
, >
, ||
, &&
和&
例如:
echo ^|
但这种情况非常罕见。
SET myPath=%1
SET myPath=%myPath:"=\"%
runas /user:abc "icacls %myPath% /grant Everyone:(F) /T"
编辑 - 变量名称已从path
更改为myPath
。 PATH是一个保留的系统变量,不应该用于任何其他目的。
在这种情况下甚至不需要搜索/替换。 只需从你的参数中删除原始引号(使用%~1
) - 然后你可以再添加你想要的任何内容,例如转义的引号。 在你的例子中:
runas /user:abc "icacls \"%~1\" /grant Everyone:(F) /T"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.