Mehrere Befehle in einer einzelnen Zeile in einer Windows-Batchdatei


Antworten:


181

Verwenden:

echo %time% & dir & echo %time%

Dies entspricht aus dem Speicher dem bashSemikolon -Trennzeichen in und anderen UNIXy-Shells.

Es gibt auch &&(oder ||), die den zweiten Befehl nur ausführen, wenn der erste erfolgreich war (oder fehlgeschlagen ist), aber das einzelne kaufmännische Und &ist das, wonach Sie hier suchen.


Dies gibt Ihnen wahrscheinlich die gleiche Zeit, da Umgebungsvariablen eher beim Lesen als beim Ausführen ausgewertet werden.

Sie können dies umgehen, indem Sie die verzögerte Erweiterung aktivieren:

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

Das wird über die Kommandozeile benötigt. Wenn Sie dies in einem Skript tun, können Sie einfach Folgendes verwenden setlocal:

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

Danke für die Antwort. Das Problem ist, dass es teilweise funktioniert. Das erste und das letzte% time% werden zur gleichen Zeit gedruckt, auch wenn der Befehl (in der Mitte) mindestens 40 Sekunden dauert (ich führe mein Skript anstelle des Befehls dir aus)
Raghuram

1
Dies liegt daran, dass die Umgebungsvariablen ausgewertet werden, wenn der Befehl gelesen und nicht ausgeführt wird. Ich werde die Antwort aktualisieren.
Paxdiablo

Trotzdem bleibt das Problem bestehen. Das Skript wird mit Code 1 beendet. Das zweite Echo wird jedoch gleichzeitig gedruckt. Siehe hierzu op. 12: 57: 56.93 Ein Thread wurde beendet, während 3 Threads ausgeführt wurden. 12: 57: 56.93
Raghuram

3
Ich neigte dazu, time /t(oder echo.|time) zu verwenden, anstatt echo %time%das Problem zu umgehen.
Joey

1
Irgendeine Idee, wie man% errorlevel% bei folgenden Aufrufen korrekt macht?
BradLaney
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.