&&
jest notorycznie trudny do wyszukania w google, ale najlepsze, co znalazłem, to ten artykuł, który mówi, że należy go używać -and
.
Niestety nie daje więcej informacji i nie mogę dowiedzieć się, z czym mam zrobić -and
(znowu, notorycznie trudna rzecz do wyszukania)
Kontekst, w którym próbuję go użyć, to „wykonaj cmd1, a jeśli się powiedzie, wykonaj cmd2”, w zasadzie to:
csc /t:exe /out:a.exe SomeFile.cs && a.exe
To powinno być kilka łatwych powtórzeń dla kogoś, kto wie, dzięki!
Edycja: Jeśli chcesz po prostu uruchomić wiele poleceń w jednej linii i nie obchodzi Cię, czy pierwsza zawiedzie, czy nie, możesz użyć ;
Do większości moich celów jest to w porządku
Na przykład: kill -n myapp; ./myapp.exe
.
syntax
powershell
Orion Edwards
źródło
źródło
&&
i||
staniem się częścią PowerShell: zagłosuj na tę funkcję tutaj .!sym
.&&
i||
! Ważenie na GitHub PROdpowiedzi:
W CMD „&&” oznacza „wykonaj polecenie 1, a jeśli się powiedzie, wykonaj polecenie 2”. Używałem go do takich rzeczy jak:
W PowerShell najbliższą rzeczą, jaką możesz zrobić, jest:
Ma tę samą logikę, ale tekst wyjściowy poleceń zostaje utracony. Ale może ci to wystarczy.
Jeśli robisz to w skrypcie, prawdopodobnie lepiej będzie oddzielić instrukcje, na przykład:
2019/11/27 :
&&
Operator jest teraz dostępny dla programu PowerShell 7 w wersji zapoznawczej 5+ :źródło
build ; if ($?) { run_tests }
w wierszu poleceń.bash
pomysły na PowerShell. To podstawowa funkcjonalność powłoki. Jak dotąd najlepsze, jakie widziałem, to to,build ; if ($?) { run_tests }
którego będę używać od teraz. Mam nadzieję, że zespół PowerShell doda&&
wsparcie!&& i || znajdowały się na liście rzeczy do wdrożenia (nadal są), ale nie pojawiły się jako kolejna najbardziej użyteczna rzecz do dodania. Powodem jest to, że mamy -AND i -OR. Jeśli uważasz, że jest to ważne, prześlij sugestię na Connect, a rozważymy ją dla V3.
źródło
-AND
-and
zjada produkt, wcale nie równoważny.Spróbuj tego:
źródło
$ErrorActionPreference
reguluje tylko sposób traktowania niekańczących błędów zgłaszanych przez polecenia cmdlet ; narzędzia zewnętrzne, takie jakcsc
ia.exe
nigdy nie zgłaszają takich błędów (odzwierciedlają one tylko stan wyjścia w$?
(flaga sukcesu) i$LASTEXITCODE
(zgłoszony konkretny kod zakończenia)), więc linia poleceń oznacza bezwarunkowe wykonanie obu poleceń (odpowiednikcmd
'scsc /t:exe /out:a.exe SomeFile.cs & a.exe
)Jeśli twoje polecenie jest dostępne w cmd.exe (coś w rodzaju,
python ./script.py
ale nie polecenie PowerShell, takie jakii .
(oznacza to otwarcie bieżącego katalogu przez eksplorator)), możesz uruchomić cmd.exe w PowerShell. Składnia jest następująca:Tutaj
&&
zapewnia składnia cmd opisana w tym pytaniu .źródło
Wypróbowałem tę sekwencję poleceń w PowerShell:
Pierwszy test
($MyVar -ne $null)
zwrócił prawdę i(Get-Content $MyVar)
również zwrócił prawdę .Drugi test
($MyVar -ne $null)
zwrócił false i do tej pory muszę założyć, że(Get-Content $MyVar)
również zwrócił false .Trzeci test wykazał, że drugi warunek nie został nawet przeanalizowany.
($MyVar -ne $null)
zwrócił fałsz i udowodnił, że drugi warunek(Get-Content "C:\MyTxt.txt")
nigdy nie został spełniony , zwracając fałsz dla całego polecenia.źródło
Bardzo stare pytanie, ale dla nowicjuszy: być może wersja PowerShell (podobna, ale nie równoważna ), której poszukuje pytanie, ma
-and
następującą postać:(build_command) -and (run_tests_command)
źródło
&&
, ponieważ ignoruje kod zakończeniabuild_command
.;
jest odpowiednikiem&
w cmd i;
bash. To zdecydowanie nie to samo, co&&
w cmdZależy to od kontekstu, ale oto przykład „-i” w działaniu:
To znaczy, że wszystkie pliki większe niż 10kb znajdują się w katalogu, którego nazwa zaczyna się od „f”.
źródło
To trochę dłużej niż "&&", ale robi to samo bez skryptów i nie jest zbyt trudne do zapamiętania. Lepiej późno niż wcale. :)
źródło
Start-Process
jest ogólnie niewłaściwym narzędziem do wywoływania narzędzi wiersza poleceń. W szczególności, jak tutaj użyto,Start-Process
działafilename1.exe
asynchronicznie w nowym oknie konsoli i nie zwraca nic , co w kontekście Boolean zwraca wartość$false
. Nawet jeśli pominieszStart-Process
(i tak powinieneś wywoływać narzędzia wiersza poleceń - bezpośrednio), podejście to nie powiedzie się, ponieważ wynik warunku zależy wtedy od tego, czy narzędzie wygeneruje wyjście na standardowe wyjście, które nie ma gwarantowanego związku z tym, czy udało się czy nie.Myślę, że proste stwierdzenie „if” może to osiągnąć. Gdy zobaczyłem, że odpowiedź mkelement0 powyżej tego ostatniego statusu wyjścia jest przechowywana w $?, Zestawiłem następujące elementy:
Więc na przykład op będzie to:
źródło
Pełnym odpowiednikiem jest połączenie
$LASTEXITCODE
i-eq 0
:Nie jestem pewien, dlaczego mi się nie
if ($?)
udało, ale ten zadziałał.źródło
Możemy wypróbować to polecenie zamiast metody &&
spróbuj {hostname; if ($ lastexitcode -eq 0) {ipconfig / all | findstr / i bios}} złap {echo err} w końcu {}
źródło
try
/catch
, ponieważ jest potrzebne tylko do przerywania błędów, które zewnętrzne narzędzia, takie jakhostname
,ipconfig
ifindstr
nie mogą wywołać. Sprawdzanie$LASTEXITCODE
jest potrzebne tylko wtedy, gdy chcesz poznać konkretny kod zakończenia ustawiony przez zewnętrzne narzędzie - abstrakcyjny sukces lub niepowodzenie jest odzwierciedlane$?
, podobnie jak w przypadku natywnych poleceń cmdlet.&&
w systemie Unix jest bardzo podobny do try / catch, ponieważ nie wymaga zawijania kolejnych poleceń w nowym bloku (tj.}
), Gdy zwierasz późniejsze polecenia (pomijasz je). Myślę, żeAmpAmp
funkcja / filtr, który rzuca kiedy,if (!?) { throw "last command failed" }
byłaby bardzo użytecznym zamiennikiem dla przenoszenia&&
do PowerShell. użycie :csc /t:exe /out:a.exe SomeFile.cs; AmpAmp; a.exe