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

lag*_*lex 22 windows batch-file

我想在批处理脚本中运行以下内容,它需要一个参数(路径)

runas /user:abc "icacls %1 /grant Everyone:(F) /T"
Run Code Online (Sandbox Code Playgroud)

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

runas /user:abc "icacls "c:\folder" /grant Everyone:(F) /T"
Run Code Online (Sandbox Code Playgroud)

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

nic*_*ick 25

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

要执行字符串替换:

set temp=%1
set temp=%temp:"=\"%
echo %temp%
Run Code Online (Sandbox Code Playgroud)

  • 如果%1是包含空格的路径怎么办? (5认同)

And*_*son 5

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

runas /user:abc "icacls \"%~1\" /grant Everyone:(F) /T"
Run Code Online (Sandbox Code Playgroud)

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

runas /user:abc "icacls ""%~1"" /grant Everyone:(F) /T"
Run Code Online (Sandbox Code Playgroud)

作为一个方面说明^为转义特殊字符,如偶尔有用<,|,>,||,&&,和&例如:

echo ^|
Run Code Online (Sandbox Code Playgroud)

但这种情况非常罕见.