Ответ 1
Вы можете использовать \"
Здесь - это сайт с несколькими другими escape-символами, которые могут вам пригодиться
Чтобы выполнить замену строки:
set temp=%1
set temp=%temp:"=\"%
echo %temp%
Я хочу запустить следующее в пакете 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
так, чтобы он избежал кавычек?
Вы можете использовать \"
Здесь - это сайт с несколькими другими escape-символами, которые могут вам пригодиться
Чтобы выполнить замену строки:
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"