Più comandi su una singola riga in un file batch di Windows


Risposte:


181

Uso:

echo %time% & dir & echo %time%

Questo è, dalla memoria, equivalente al separatore punto bashe virgola in e altre shell UNIXy.

C'è anche &&(o ||) che esegue il secondo comando solo se il primo è riuscito (o fallito), ma la singola e commerciale &è ciò che stai cercando qui.


È probabile che ti dia lo stesso tempo, tuttavia, poiché le variabili di ambiente tendono a essere valutate in lettura piuttosto che in esecuzione.

Puoi aggirare questo problema attivando l'espansione ritardata:

pax> cmd /v:on /c "echo !time! & ping 127.0.0.1 >nul: & echo !time!"
15:23:36.77
15:23:39.85

È necessario dalla riga di comando. Se lo fai all'interno di uno script, puoi semplicemente usare setlocal:

@setlocal enableextensions enabledelayedexpansion
@echo off
echo !time! & ping 127.0.0.1 >nul: & echo !time!
endlocal

Grazie per la risposta. Il problema è che funziona parzialmente. la prima e l'ultima% time% stampa la stessa ora anche quando il comando (al centro) impiega almeno 40 secondi per essere completato (eseguo il mio script invece del comando dir)
— Raghuram

1
Questo perché le variabili di ambiente vengono valutate quando il comando viene letto piuttosto che eseguito. Aggiornerò la risposta.
— paxdiablo

Tuttavia il problema persiste. Lo script sta uscendo con il codice 1. Ma il secondo echo viene stampato allo stesso tempo Vedi questo op 12: 57: 56.93 Un thread è uscito mentre 3 thread erano in esecuzione. 12:57: 56.93
— Raghuram

3
Tendevo a usare time /t(o echo.|time) invece di echo %time%aggirare il problema.
— Joey

1
Qualche idea su come ottenere% errorlevel% corretto nelle chiamate successive?
— BradLaney
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.