Chcę uruchomić dwa polecenia w konsoli CMD systemu Windows.
W Linuksie zrobiłbym to w ten sposób
touch thisfile ; ls -lstrh
Jak to się robi w systemie Windows?
źródło
Chcę uruchomić dwa polecenia w konsoli CMD systemu Windows.
W Linuksie zrobiłbym to w ten sposób
touch thisfile ; ls -lstrh
Jak to się robi w systemie Windows?
Podobnie jak we wszystkich systemach operacyjnych Microsoft od 2000 roku, i nadal jest dobry:
dir & echo foo
Jeśli chcesz, aby drugie polecenie zostało wykonane tylko wtedy, gdy pierwsze zakończyło się pomyślnie:
dir && echo foo
Pojedyncza składnia ampersand (&) służąca do wykonywania wielu poleceń w jednym wierszu sięga systemu Windows XP, Windows 2000 i niektórych wcześniejszych wersji NT. (Przynajmniej 4.0, według jednego komentatora tutaj.)
Jest jeszcze kilka innych punktów na ten temat, które przewijają się w dół tej strony.
Dane historyczne dla tych, którzy mogą uznać je za edukacyjne.
Wcześniej składnia && była tylko funkcją wymiany powłoki 4DOS, zanim ta funkcja została dodana do interpretera poleceń Microsoft.
W systemach Windows 95, 98 i ME zamiast tego należy użyć znaku potoku:
dir | echo foo
W MS-DOS 5.0 i nowszych wersjach, w niektórych wcześniejszych wersjach interpretera poleceń dla Windows i NT, (nieudokumentowanym) separatorem poleceń był znak 20 (Ctrl + T), który będę tutaj reprezentował ^ T.
dir ^T echo foo
cmd
natychmiastowym, więc przypuszczam, że nie jest to zły nawyk wchodzenia w to. :)Cytat z dokumentacji:
źródło
cmd /c "echo foo & echo bar"
.vagrant up && vagrant ssh
działał bez cudzysłowów w systemie Windows 10.&
- czyni go asynchronicznym i działa równolegle. Utknąłem, ponieważ korzystałem&&
z jest synchroniczne i kontynuuje tylko, jeśli pierwszy się powiedzie!&
nie czyni poleceń asynchronicznymi ani równoległymi.command1 & command2
uruchomi sięcommand2
pocommand1
zakończeniu. Sukces lub porażka niecommand1
ma znaczenia.&
jest odpowiednikiem Bash dla;
(uruchom polecenia) i&&
jest odpowiednikiem Bash&&
(uruchom polecenia tylko wtedy, gdy poprzednie nie spowodowało błędu).źródło
;
w Linuksie;
oznacza uruchomienie pierwszego polecenia, poczekaj na jego zakończenie, a następnie uruchom drugie polecenie.&
oznacza uruchomienie pierwszego polecenia, umieszczenie go w tle i uruchomienie drugiego polecenia. Oba programy uruchamiają się jednocześnie. Zauważ, że nie łączą one symboli, lecz kończą się symbolami do pierwszego polecenia; możesz uruchomić pojedyncze polecenie w tleprogname &
bez drugiego polecenia.Możesz używać & do uruchamiania poleceń jeden po drugim. Przykład:
c:\dir & vim myFile.txt
źródło
Jeśli chcesz utworzyć skrót cmd (na przykład na pulpicie) dodaj parametr / k (/ k oznacza zachowaj, / c zamknie okno):
źródło
Możesz użyć wywołania, aby rozwiązać problem zbyt wczesnej oceny zmiennych środowiskowych - np
źródło
echo
wypisuje starą wartość, a nie nową. Przynajmniej to obserwuję na moim pudełku Windows 7.setlocal EnableDelayedExpansion
w skrypcie lubcmd /v
). Na przykład:timeout 5 && cmd /v /c echo !TIME! && echo %TIME%
.Szereg przetwarzania symboli może być używany podczas uruchamiania kilku poleceń na tej samej linii, co może prowadzić do przekierowania przetwarzania w niektórych przypadkach zmiany wyjście w innym przypadku, lub po prostu zawodzą. Jednym ważnym przypadkiem jest umieszczenie w tym samym poleceniu linii, które manipuluje zmiennymi.
Jak widać w powyższym przykładzie, gdy polecenia korzystające ze zmiennych są umieszczone w tym samym wierszu, należy użyć opóźnionego rozwinięcia, aby zaktualizować wartości zmiennych. Jeśli twoja zmienna jest indeksowana, użyj polecenia CALL z modyfikatorami %%, aby zaktualizować jej wartość w tym samym wierszu:
źródło
cmd /V:ON /c "set i=5 & set arg!i!=MyFile!i! & echo path!i!=%temp%\%arg!i!%"
cmd /c ipconfig /all & Output.txt
To polecenie wykonuje polecenie i otwiera
Output.txt
plik w jednym poleceniuźródło
Próbowałem więc włączyć określone zadanie uruchamiania
RegAsm
(rejestracja zestawu) z menu kontekstowego. Problem polegał na tym, że wynik migał i znikał, zanim mogłem go przeczytać. Więc próbowałem potokowania doPause
, który nie działa, gdy polecenie nie powiedzie się (jak wspomniano tutaj polecenie Wstrzymaj nie działa w skrypcie .bat i tutaj polecenie pliku wsadowego PAUSE nie działa ). Więc próbowałem,cmd /k
ale to pozostawia otwarte okno na więcej poleceń (chcę tylko przeczytać wynik). Dlatego dodaje siępause
następnieexit
do sieci, co prowadzi do następujących:cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" & pause & exit
Działa to jak urok - RegAsm uruchamia się na pliku i pokazuje jego wyniki, a następnie pojawia się monit „Naciśnij dowolny klawisz, aby kontynuować ...”, a okno wiersza polecenia zamyka się po naciśnięciu klawisza.
PS W przypadku innych osób, które mogą być zainteresowane, możesz użyć następujących wpisów pliku .reg, aby dodać skojarzenie pliku dll do plików .dll, a następnie rozszerzenie polecenia RegAsm (zwróć uwagę na cytowane znaki cudzysłowu i ukośniki odwrotne):
Teraz mam ładne menu prawym przyciskiem myszy, aby zarejestrować zespół.
źródło
Aby wykonać dwa polecenia jednocześnie, musisz umieścić symbol & (ampersand) między tymi dwoma poleceniami. Tak jak:
Twoje zdrowie!
źródło
Próbuję mieć dwa pingi w tym samym oknie i jest to polecenie szeregowe w tym samym wierszu. Po zakończeniu pierwszego uruchom drugie polecenie.
Rozwiązaniem było połączenie z
start /b
wierszem poleceń systemu Windows 7.Zacznij jak zwykle bez
/b
i uruchom w osobnym oknie.Polecenie użyte do uruchomienia w tym samym wierszu to:
W każdym razie, jeśli chcesz przeanalizować dane wyjściowe, nie polecam tego używać. Zauważyłem, że dane wyjściowe są zakodowane między danymi wyjściowymi poleceń.
źródło
Masz dwie opcje: orurowanie lub po prostu
&
:Lub,
Piping (
|
) służy bardziej do pobierania danych wyjściowych jednego polecenia i umieszczania go w innym. I (&
) mówi tylko „uruchom to i tamto”.źródło
&
i|
robić i jak różnią się one, jeśli w ogóle? W tej chwili ludzie niezaznajomieni z tymi pojęciami nie są w stanie samodzielnie zdecydować, które z nich należy zastosować w ich przypadkach.Nie
cd / && tree && echo %time%
. Czas echa jest w chwili wykonania pierwszego polecenia.Rurociągi mają pewien problem, ale nie są krytyczne, dopóki ludzie wiedzą, jak to działa.
źródło
Jeszcze jeden przykład: na przykład, gdy używamy
gulp
systemu kompilacji zamiastgulp
- domyślnie> buildgulp build
- build-build-foldergulp watch
- rozpocznij oglądanie plikówgulp dist
- buduj folder distMożemy to zrobić za pomocą jednej linii:
źródło
Kiedy próbujesz używać lub manipulować zmiennymi w jednym wierszu, strzeż się ich zawartości! Np. Zmienna taka jak poniżej
może powodować wiele nieprzyjemnych problemów, jeśli użyjesz go jako
%PATH%
%PATH%
na obsługę problemu z nawiasami%USERPROFILE%
zawierać zmienna, do której istnieje odwołanie ?źródło
Tak jest. Jest
&
.&&
wykona polecenie 2 po zakończeniu polecenia 1, pod warunkiem, że nie zakończyło się ono niepowodzeniem.&
wykona się niezależnie.źródło
Użyj
&
symbolu w systemie Windows, aby użyć polecenia w jednym wierszujak w Linuksie, którego używamy,
źródło
To proste: wystarczy odróżnić je
&&
znakami. Przykład:„Goodbye World” zostanie wydrukowany po „Hello World”.
źródło
&&
jest operatorem warunkowym , następne polecenie jest wykonywane tylko wtedy, gdy pierwsze polecenie powiodło się (poziom błędu = 0)Hello World
nie zakończy się niepowodzeniem. jak powiedział @jeb,&&
jest warunkowe.&
uruchamia polecenia niezależnie od tego, czy poprzednie zakończyło się powodzeniem, czy nie.