Пакетный скрипт - экранирование двойных кавычек в переменной - PullRequest
0 голосов
/ 25 мая 2020

Я хочу запустить сценарий, единственная цель которого - выполнить его первый аргумент, поэтому у меня есть следующий сценарий:

set command=%~1
%command%

И я запускаю его как RunCommand.bat "echo hello world", который работает.

Теперь я хочу избежать любого специального символа, например двойной кавычки. Я пробовал несколько вариантов, но не работает. Есть идеи?

Это мой самый близкий: RunCommand.bat "echo ""special char""" который печатает-> ""special char""

EDIT

Этот скрипт работает

set "command=%~1"
set "command=%command:""="%"
%command%

ссылка на Исключение двойных кавычек в пакетном скрипте

1 Ответ

1 голос
/ 26 мая 2020

Не нужно ничего экранировать.

runcommand.bat:

@%*

(да, вот и все)

Вывод:

C:\temp>runcommand.bat echo "hello World!"
"hello World!"

C:\temp>runcommand.bat ping -n 1 www.google.com

Ping wird ausgeführt für www.google.com [216.58.205.228] mit 32 Bytes Daten:
Antwort von 216.58.205.228: Bytes=32 Zeit=13ms TTL=57

Ping-Statistik für 216.58.205.228:
    Pakete: Gesendet = 1, Empfangen = 1, Verloren = 0
    (0% Verlust),
Ca. Zeitangaben in Millisek.:
    Minimum = 13ms, Maximum = 13ms, Mittelwert = 13ms

C:\temp>runcommand.bat wmic os get serialnumber /value


SerialNumber=00248-80000-00000-AR7GX

В ответ на my bat file must receive its variable inside a double quote: я не вижу пользы в усложнении вещей дополнительными кавычками, когда они не нужны, но здесь вы go (экранирование по-прежнему не требуется):

@cmd /c %*

Вывод:

C:\temp>runcommand "echo "special char"&echo hello"
"special char"
hello
...