Um dos exemplos em RUNAS /? mostra essa sintaxe. O cursor é o caractere de escape para CMD.EXE , mas, no Windows, os programas individuais são gratuitos para implementar seus próprios caracteres de escape e globbing.
Eu vejo que o cursor é o caractere de escape documentado.
Mas, eu tenho um exemplo mostrando que para o caracter de aspas duplas, ^ não funciona e você tem que usar \
C:\>runas /user:Administrator "cmd /k dir \"%userprofile%\""
Por que isso e onde está documentado?
Em cmd, \ não não escapam " . Aqui está uma prova rápida e explicação:
Execute echo "" & echo 1 . ( & é um caractere especial em cmd, left & right significa execução left e, em seguida, execução right .) Podemos ver que echo "" e echo 1 são executados com êxito.
Em seguida, execute echo " & 1234 . Podemos ver que a saída é " & 1234 . Isso ocorre porque a abertura " não foi fechada e, portanto, tudo depois dela é interpretado como uma string, incluindo o caractere especial & .
Executar echo "\" & 1234 .
Se \ escapar do seguinte " , a abertura " não será fechada e os caracteres & 1234 serão interpretados como parte da sequência.
Se \ não conseguir escapar do seguinte " , esse seguindo " fechará a string e & 1234 não será interpretado como parte da string.
Na saída, não vemos & 1234 interpretado como parte da string. Isso prova que \ não escapou de " .
Então, o que escapa de " entre aspas para passagem de argumentos? Embora o ^ funcione fora das cotações (facilmente comprovado por echo ^" & echo 1 ), ele não perde as cotações entre aspas.
De fato, como podemos fazer algo tão simples como echo """ & echo 1 funcionar?
O ^ char? ... Não, echo "^"" & echo 1 outputs "^"" e não """ .
O que acha do próprio " char? ... Não, echo """" & echo 1 outputs """" e não """ .
O fato é que não há nada que escape de " entre aspas para passagem de argumentos . Você pode refletir sobre isso por um par de anos e chegar a nenhuma solução. Estas são apenas algumas das limitações inerentes do script cmd.
No entanto, a boa notícia é que você provavelmente nunca irá se deparar com uma situação na qual você precisa fazer isso. Claro, não há como fazer com que echo """ & echo 1 funcione, mas isso não é grande coisa, porque é simplesmente um problema artificial que você provavelmente nunca encontrará.
Por exemplo, considere runas . Ele funciona bem sem precisar escapar de " entre aspas porque runas sabia que não há como fazer isso e fez ajustes internos para contornar o problema. runas inventou suas próprias regras de análise ( runas /flag "anything even including quotes" ) e não interpreta argumentos cmd da maneira usual. A documentação oficial para essa sintaxe especial é bastante esparsa (ou inexistente). Além de /? e help , é principalmente tentativa e erro.
O sinal \ faz o intérprete interpretar o próximo sinal como um caractere em vez de um identificador .
Você também vê muito no código:
"Hello \"World\""
isto é interpretado como
Hello "World"
no seu exemplo, para passar os argumentos para cmd , ele precisa ser colocado em "". Mas como os argumentos para cmd contêm "(e isso encerraria o gabinete) eles são anexados por \ . Se o" "não estivesse lá, o /k dir \"%userprofile%\" teria sido interpretado como argumentos para runas , não para cmd .
O motivo pelo qual eles estão colocando o% userprofile% é porque esta é uma variável de ambiente e será substituída pelo texto que pode conter espaços, que (pelo mesmo motivo acima) tornariam o argumento cmd incorreto.