I comandi lunghi si suddividono su più righe nel file batch (.bat) di Windows Vista

Come faccio a impostare i comandi lunghi su più righe in un file batch di Windows (Vista)?

Puoi spezzare le linee lunghe con il cursore ^ finché ti ricordi che il segno di omissione e la nuova riga che segue è completamente rimosso. Quindi, se ci dovrebbe essere uno spazio in cui stai rompendo la linea, includi uno spazio. (Di più su quello sotto. )

Esempio:

 copy file1.txt file2.txt 

sarebbe scritto come:

 copy file1.txt^ file2.txt 

La regola per il segno di omissione è:

Un segno di omissione alla fine della riga, aggiunge la riga successiva, il primo carattere della riga aggiunta verrà sfuggito.

È ansible utilizzare il cursore più volte, ma la linea completa non deve superare la lunghezza massima della linea di ~ 8192 caratteri (Windows XP, Windows Vista e 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 

Per sopprimere l’escape del prossimo carattere puoi usare un reindirizzamento.

Il reindirizzamento deve essere appena prima del cursore. Ma esiste una curiosità con il reindirizzamento prima del cursore.

Se si posiziona un token sul punto di inserimento, il token viene rimosso.

 echo Test5 echo one  

Ed è anche ansible incorporare feed di linee nella stringa:

 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 linea vuota è importante per il successo. Funziona solo con un'espansione ritardata, altrimenti il ​​resto della linea viene ignorato dopo l'avanzamento della riga.

Funziona, perché il segno di omissione alla fine della linea ignora il successivo avanzamento riga e sfugge al carattere successivo, anche se il carattere successivo è anche un avanzamento riga (i ritorni a capo vengono sempre ignorati in questa fase).

(Questa è fondamentalmente una riscrittura della risposta di Wayne, ma con la confusione intorno al caret chiarita. Quindi l’ho postata come CW. Non sono timido nel modificare le risposte, ma riscriverle completamente sembra inappropriato.)

Puoi spezzare le linee lunghe con il segno di omissione ( ^ ), ricorda solo che il punto di inserimento e il ritorno a capo che lo segue vengono rimossi interamente dal comando, quindi se lo metti dove uno spazio sarebbe richiesto (come tra i parametri), sii sicuro di includere anche lo spazio (prima del ^ , o all’inizio della riga successiva – quest’ultima opzione può aiutare a chiarire che è una continuazione).

Esempi: (tutti testati su Windows XP e Windows 7)

 xcopy file1.txt file2.txt 

può essere scritto come:

 xcopy^ file1.txt^ file2.txt 

o

 xcopy ^ file1.txt ^ file2.txt 

o anche

 xc^ opy ^ file1.txt ^ file2.txt 

(Quest’ultimo funziona perché non ci sono spazi tra xc e ^ , e nessuno spazio all’inizio della riga successiva, quindi quando rimuovi la ^ e la nuova linea ottieni … xcopy .)

Per la leggibilità e la sanità mentale, è probabilmente meglio interrompere solo tra i parametri (assicurati di includere lo spazio).

Assicurati che il ^ non sia l’ultima cosa in un file batch, in quanto sembra esserci un grosso problema con questo .

I comandi multipli possono essere messi tra parentesi e sparsi su numerose linee; quindi qualcosa come echo hi && echo hello può essere messo così:

 ( echo hi echo hello ) 

Anche le variabili possono aiutare:

 set AFILEPATH="C:\SOME\LONG\PATH\TO\A\FILE" if exist %AFILEPATH% ( start "" /b %AFILEPATH% -option C:\PATH\TO\SETTING... ) else ( ... 

Inoltre ho notato con i carnet ( ^ ) che i condizionali if li piacevano seguire solo se era presente uno spazio:

 if exist ^ 

Sembra comunque che la suddivisione in mezzo ai valori di un ciclo for non abbia bisogno di un accento circonflesso (e in effetti provare a usarne uno sarà considerato un errore di syntax). Per esempio,

 for %n in (hello bye) do echo %n 

Si noti che nessuno spazio è nemmeno necessario dopo ciao o prima ciao.