Не нужно ничего экранировать.
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