Escape "двойные кавычки" внутри параметров пакетного ввода - программирование

Escape "двойные кавычки" внутри параметров пакетного ввода

Я хочу запустить следующее в пакете script, где он принимает аргумент (путь)

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

но аргумент %1 уже содержит " (потому что это путь, переданный по контекстному меню Send To - у меня нет большого контроля над этим). Поэтому, когда команда запускается в пакетном режиме script, она выполняется следующим образом:

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

Поэтому, очевидно, мне нужно избежать ", созданного %1. Как выполнять строковые манипуляции над %1 так, чтобы он избежал кавычек?

4b9b3361

Ответ 1

Вы можете использовать \" Здесь - это сайт с несколькими другими escape-символами, которые могут вам пригодиться

Чтобы выполнить замену строки:

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

Ответ 2

Каждый ответ охватывает часть ответа. Объединение их с помощью обратной косой черты и цитаты: \" вы получаете:

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

или вы можете удвоить (удвоить) кавычки, чтобы избежать их:

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

В качестве побочной заметки ^ иногда полезно использовать специальные символы, такие как <, |, >, ||, && и & Например:

echo ^|

но это довольно редко.

Ответ 3

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

Изменить - имя переменной было изменено с path на myPath. PATH - это зарезервированная системная переменная, которая не должна использоваться ни для чего другого, кроме того, что было предназначено.

Ответ 4

Поиск и замена не нужны даже в таких случаях. Просто разделите исходные кавычки из вашего аргумента (с помощью %~1) - тогда вы можете добавить снова все, что захотите, например. экранированные кавычки. В вашем примере:

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