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.