Comment puis-je diviser de longues commandes sur plusieurs lignes dans un fichier de commandes?
batch-file
Ondra Žižka
la source
la source
^
et après votre texte de commande.echo
édité.co^␍py ^␍file1 ^␍file2
. Je vous suggère de supprimer votre commentaire pour éviter toute confusion, d'autant plus que cette quête est si populaireLa règle pour le curseur est:
Un signe d'insertion à 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).
Pour supprimer l'échappement du caractère suivant, vous pouvez utiliser une redirection.
La redirection doit être juste avant le signe d'insertion. Mais il existe une curiosité avec redirection devant le curseur.
Si vous placez un jeton sur le curseur, le jeton est supprimé.
Et il est également possible d' incorporer des sauts de ligne dans la chaîne:
La ligne vide est importante pour le succès. Cela ne fonctionne qu'avec une expansion retardée, sinon le reste de la ligne est ignoré après le saut de ligne.
Cela fonctionne, car le signe d'insertion à la fin de la ligne ignore le saut de ligne suivant et échappe au caractère suivant, même si le caractère suivant est également un saut de ligne (les retours chariot sont toujours ignorés dans cette phase).
la source
copy ^[newline]"file1.txt" ^[newline]"file2.txt"
ne fonctionne pas! Je devais ajouter un espace:copy ^[newline] "file1.txt" ^[newline] "file2.txt"
.(Il s'agit essentiellement d'une réécriture de la réponse de Wayne, mais avec la confusion autour du curseur dissipée. Je l'ai donc posté en CW. Je n'ai pas peur de modifier les réponses, mais les réécrire complètement semble inapproprié.)
Vous pouvez rompre 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 là où un espace serait nécessaire (comme entre les paramètres), assurez-vous d'inclure également l'espace (soit avant la^
, soit au début de la ligne suivante - ce dernier choix peut aider à rendre plus clair que c'est une continuation).Exemples: (tous testés sur Windows XP et Windows 7)
peut s'écrire:
ou
ou même
(Ce dernier fonctionne car il n'y a pas d'espaces entre le
xc
et le^
, et pas d'espaces au début de la ligne suivante. Ainsi, lorsque vous supprimez le^
et la nouvelle ligne, vous obtenez ...xcopy
)Pour la lisibilité et la raison, il est probablement préférable de ne briser qu'entre les paramètres (assurez-vous d'inclure l'espace).
Assurez-vous que ce
^
n'est pas la dernière chose dans un fichier de commandes, car il semble y avoir un problème majeur avec cela .la source
Plusieurs commandes peuvent être mises entre parenthèses et réparties sur de nombreuses lignes; donc quelque chose comme ça
echo hi && echo hello
peut être mis comme ceci:Les variables peuvent également aider:
J'ai également remarqué avec carets (
^
) que lesif
conditionnelles ne les aimaient à suivre que si un espace était présent:la source
cmd1.bat && cmd2.bat
est différente de la forme parens: exécutercmd2.bat
ssicmd1.bat
exécuté avec succès (-sans paramètre%errorcode%
). Cette dernière forme s'exécute sans condition. Un peu inattendu (du moins pour moi) est que, évidemment, vous ne pouvez pas utiliser la combinaison des deux + ie ajouter&&
avant le saut de ligne.( echo <line break here> hello )
entraîne une ligne vide.Il semble cependant que le fractionnement au milieu des valeurs d'une boucle for ne nécessite pas de signe d'insertion (et en fait, essayer d'en utiliser un sera considéré comme une erreur de syntaxe). Par exemple,
Notez qu'aucun espace n'est même nécessaire après bonjour ou avant au revoir.
la source
for
syntaxe: les séparateurs d'éléments dans le "for-set" sont l'espace, la virgule, le point-virgule, le signe égal, le caractère TAB et les nouvelles lignes.do
partie contient desif-else
instructions multiples / imbriquées ?