Wiele poleceń w jednym wierszu w pliku wsadowym systemu Windows


Odpowiedzi:


181

Posługiwać się:

echo %time% & dir & echo %time%

Jest to, z pamięci, odpowiednik separatora średnika w bashi innych powłokach UNIXy.

Istnieje również &&(lub ||), który wykonuje drugie polecenie tylko wtedy, gdy pierwsze powiedzie się (lub nie powiodło się), ale pojedynczy znak ampersand &jest tym, czego tutaj szukasz.


Prawdopodobnie da ci to ten sam czas, ponieważ zmienne środowiskowe są zwykle oceniane podczas odczytu, a nie wykonywania.

Możesz to obejść, włączając opóźnioną ekspansję:

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

Jest to potrzebne z wiersza poleceń. Jeśli robisz to wewnątrz skryptu, możesz po prostu użyć setlocal:

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

Dziękuję za odpowiedź. Problem w tym, że działa częściowo. pierwszy i ostatni% time% drukuje w tym samym czasie, nawet jeśli wykonanie polecenia (w środku) zajmuje co najmniej 40 sekund. (uruchamiam skrypt zamiast polecenia dir)
Raghuram

1
Dzieje się tak, ponieważ zmienne środowiskowe są oceniane, gdy polecenie jest odczytywane, a nie wykonywane. Zaktualizuję odpowiedź.
paxdiablo

Nadal problem nadal występuje. Skrypt kończy pracę z kodem 1. Ale nadal drugie echo jest drukowane w tym samym czasie. Zobacz operację 12: 57: 56.93 Wątek zakończył działanie, gdy były uruchomione 3 wątki. 12:57: 56.93
Raghuram

3
Zwykłem używać time /t(lub echo.|time) zamiast echo %time%ominąć problem.
Joey,

1
Masz jakiś pomysł, jak sprawić, by% errorlevel% był poprawny podczas kolejnych wywołań?
BradLaney
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.