Comment puis-je faire passer de longues commandes sur plusieurs lignes dans un fichier batch Windows (Vista)?
Vous pouvez diviser les longues lignes avec le curseur ^
tant que vous vous rappelez que le curseur et la nouvelle ligne qui le suit sont complètement supprimés. Donc, s’il doit y avoir un espace où vous brisez la ligne, incluez un espace. ( Plus sur cela ci-dessous. )
Exemple:
copy file1.txt file2.txt
serait écrit comme:
copy file1.txt^ file2.txt
La règle pour le caret est la suivante:
Un caret à la fin de la ligne, ajoute la ligne suivante, le premier caractère de la ligne ajoutée sera échappé.
Vous pouvez utiliser le curseur plusieurs fois, mais la ligne complète ne doit pas dépasser la longueur de ligne maximale de ~ 8 192 caractères (Windows XP, Windows Vista et Windows 7).
echo Test1 echo one ^ two ^ three ^ four^ * --- Output --- Test1 one two three four* echo Test2 echo one & echo two --- Output --- Test2 one two echo Test3 echo one & ^ echo two --- Output --- Test3 one two echo Test4 echo one ^ & echo two --- Output --- Test4 one & echo two
Pour supprimer l’échappée du caractère suivant, vous pouvez utiliser une redirection.
La redirection doit se faire juste avant le curseur. Mais il existe une curiosité avec redirection avant le caret.
Si vous placez un jeton sur le curseur, le jeton est supprimé.
echo Test5 echo one
Et il est également possible d' intégrer des sauts de ligne dans la chaîne:
setlocal EnableDelayedExpansion set text=This creates ^ a line feed echo Test7: %text% echo Test8: !text! --- Output --- Test7: This creates Test8: This creates a line feed
La ligne vide est importante pour le succès. Cela ne fonctionne qu'avec l'extension différée, sinon le rest de la ligne est ignoré après le saut de ligne.
Cela fonctionne, car le curseur à la fin de la ligne ignore le prochain saut de ligne et échappe au caractère suivant, même si le caractère suivant est également un saut de ligne (les retours de chariot sont toujours ignorés dans cette phase).
(Ceci est fondamentalement une réécriture de la réponse de Wayne, mais avec la confusion autour du caret qui s’éclaircit. Donc, je l’ai postée en tant que CW. Je ne suis pas timide pour éditer les réponses,
Vous pouvez diviser les longues lignes avec le caret ( ^
), rappelez-vous simplement que le caret et la nouvelle ligne qui le suit sont entièrement supprimés de la commande, donc si vous le placez (par exemple, entre les parameters), assurez-vous d’inclure également l’espace (soit avant le ^
, soit au début de la ligne suivante – ce dernier choix peut aider à rendre plus claire la suite).
Exemples: (tous testés sur Windows XP et Windows 7)
xcopy file1.txt file2.txt
peut être écrit comme:
xcopy^ file1.txt^ file2.txt
ou
xcopy ^ file1.txt ^ file2.txt
ou même
xc^ opy ^ file1.txt ^ file2.txt
(Ce dernier fonctionne car il n’y a pas d’espace entre le xc
et le ^
, et aucun espace au début de la ligne suivante. Donc, quand vous supprimez le ^
et le newline, vous obtenez … xcopy
.)
Pour des raisons de lisibilité et de bon sens, il est probablement préférable de ne séparer que les parameters (veillez à inclure l’espace).
Assurez-vous que le ^
n’est pas la dernière chose dans un fichier de commandes, car il semble y avoir un problème majeur avec cela .
Plusieurs commandes peuvent être mises entre parenthèses et réparties sur de nombreuses lignes; Donc, quelque chose comme echo hi && echo hello
peut être écrit comme ceci:
( echo hi echo hello )
Les variables peuvent aussi aider:
set AFILEPATH="C:\SOME\LONG\PATH\TO\A\FILE" if exist %AFILEPATH% ( start "" /b %AFILEPATH% -option C:\PATH\TO\SETTING... ) else ( ...
J’ai aussi remarqué avec les carets ( ^
) que les conditionnels if
aimaient suivre seulement si un espace était présent:
if exist ^
Il semble cependant que le fractionnement au milieu des valeurs d’une boucle for n’ait pas besoin d’un caret (et en fait, essayer d’en utiliser une sera considéré comme une erreur de syntaxe). Par exemple,
for %n in (hello bye) do echo %n
Notez qu’aucun espace n’est même nécessaire après le salut ou au revoir.