在批次的input参数中将“双引号”转义

我想在批处理脚本中运行以下参数(path)

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

但是参数%1已经包含了一个" (因为它是一个path,通过上下文菜单的Send To传递 – 我没有太多的控制权)所以当命令在批处理脚本中运行时,它的运行方式如下:

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

所以很显然,我需要逃避由%1创build的"我如何执行string操作超过%1 ,以便它逃脱引号?

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

要执行字符串替换:

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

每个答复都涵盖了答案的一部分。 结合使用反斜杠" \"你会得到:

 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"