Comment échapper correctement à une commande citée après une continuation de ligne?

Exécuter le fichier de commandes exemple suivant,

echo foo &&^ "C:\Program Files\Internet Explorer\iexplore.exe" 

… produit la sortie suivante:

 foo '"C:\Program' is not recognized as an internal or external command, operable program or batch file. 

Qu’est-ce que je rate?

MODIFIER

Comme balisé, cette question concerne les fichiers de commandes Windows (XP).

Désolé, mais presque toutes les réponses sont fausses ou ne comprennent pas ce qui se passe.

Le problème est indépendant de cmd-line ou s’il se trouve dans un fichier de commandes.

La règle pour le caractère multiligne caret:
Un trait au bout d’une ligne, ajoute la ligne suivante et échappe au premier caractère de la ligne ajoutée!
C’est la cause pourquoi tu as

 echo foo ^ && echo bar ---- OUTPUT --- foo & bar --------------- rem equivalent to echo foo ^&& echo bar rem So the first ampersand is escaped and the second works as a single & 

C’est aussi la raison pour laquelle le code d’origine ne peut pas fonctionner

 echo foo &&^ "C:\Program Files\Internet Explorer\iexplore.exe" rem is equivalent to this, so the quote will be escaped echo foo &&^"C:\Program Files\Internet Explorer\iexplore.exe" 

Et pourquoi l’autre solution fonctionne?

 echo foo &&^ cmd /c "C:\Program Files\Internet Explorer\iexplore.exe" rem is equivalent to echo foo &&^cmd /c "C:\Program Files\Internet Explorer\iexplore.exe" 

Et si vous échappez le “c” ou pas n’est pas important pour le “cmd”.

Il y a un moyen de faire fonctionner la deuxième ligne sans la modifier.

 echo foo && >con ^ "C:\Program Files\Internet Explorer\iexplore.exe" 

Ceci est un cas particulier d’un cas particulier , le caret fonctionne comme une multiligne normale, mais sans échapper au premier caractère. (Je suppose que cmd.exe n’est pas programmé, il sort du chaos).

Cmd.exe semble parsingr correctement les guillemets lorsqu’ils sont précédés de symboles de traitement conditionnel (par exemple, & , && , || ).

En guise de solution, vous pouvez utiliser un chemin contenant des noms abrégés uniquement sans caractères d’espacement:

 echo foo &&^ C:\Progra~1\Intern~1\iexplore.exe 

Ou utilisez une variable auxiliaire avec expansion variable différée:

 setlocal enabledelayedexpansion set "IE_EXE=C:\Program Files\Internet Explorer\iexplore.exe" echo foo &&^ !IE_EXE! 

Cela semble fonctionner aussi:

 echo foo &&^ cmd /c "C:\Program Files\Internet Explorer\iexplore.exe" 

Essayez de mettre && sur la deuxième ligne.

 echo foo ^ && "C:\Program files\internet explorer\iexplore.exe" 

Edit: Comme la question le demande, cette commande doit être exécutée dans un fichier de commandes. Cela fonctionne à partir du fichier de commandes mais fonctionne incorrectement sur la ligne de commande!

Vous devez citer le chemin s’il contient des espaces; Je ne suis pas tout à fait sûr de la langue que vous utilisez, mais fondamentalement, vous avez besoin de:

 ""C:\Program Files\Internet Explorer\iexplore.exe"" 

Essayez de supprimer les esperluettes.

 echo foo ^ "C:\Program Files\Internet Explorer\iexplore.exe" 

Je reçois

 C:\Users\keith\Desktop>echo foo foo C:\Users\keith\Desktop>"C:\Program Files\Internet Explorer\iexplore.exe" 

edit – Je n’ai pas @echo off en haut de mon fichier batch.