&&
общеизвестно, что его трудно найти в Google, но лучшее, что я нашел, - это статья, в которой говорится, что нужно использовать -and
.
К сожалению, это не дает больше информации, и я не могу выяснить, что я должен делать -and
(опять же, общеизвестно трудная вещь для поиска)
Контекст, в котором я пытаюсь использовать это: «выполнить cmd1, и в случае успеха выполнить cmd2», в основном это:
csc /t:exe /out:a.exe SomeFile.cs && a.exe
Это должно быть несколько простых повторений для тех, кто знает, спасибо!
Изменить: Если вы просто хотите запустить несколько команд в одной строке, и вам все равно, если первая не работает или нет, вы можете использовать ;
Для большинства моих целей это нормально
Например: kill -n myapp; ./myapp.exe
.
syntax
powershell
Орион Эдвардс
источник
источник
&&
и||
становится частью PowerShell: пожалуйста, проголосуйте за эту функцию здесь .!sym
.&&
и||
! Взвешивание в GitHub PRОтветы:
В CMD «&&» означает «выполнить команду 1, а в случае успеха выполнить команду 2». Я использовал его для таких вещей, как:
В PowerShell самое близкое, что вы можете сделать, это:
У него та же логика, но выходной текст из команд потерян. Может быть, это достаточно хорошо для вас, хотя.
Если вы делаете это в скрипте, вам, вероятно, будет лучше разделить операторы, например так:
2019/11/27 :
&&
оператор теперь доступен для PowerShell 7 Preview 5+ :источник
build ; if ($?) { run_tests }
в командной строке.bash
идеи PowerShell. Это базовая функциональность оболочки. Пока лучшее, что я видел, это то,build ; if ($?) { run_tests }
что я буду использовать с этого момента . Я надеюсь, что команда PowerShell добавляет&&
поддержку!&& и || были в списке вещей для реализации (все еще есть), но не появлялись как следующая самая полезная вещь, которую нужно добавить. Причина в том, что у нас есть -AND и -OR. Если вы считаете это важным, пожалуйста, отправьте предложение по Connect, и мы рассмотрим его для V3.
источник
-AND
-and
съедает вывод, совсем не эквивалентный.Попробуй это:
источник
$ErrorActionPreference
определяет только то, как обрабатываются неразрывные ошибки, сообщаемые командлетами ; внешние утилиты, такие какcsc
иa.exe
никогда не сообщают о таких ошибках (они отражают только свое состояние выхода в$?
(флаг успеха) и$LASTEXITCODE
(указанный код выхода)), поэтому ваша командная строка сводится к безусловному выполнению обеих команд (эквивалентноcmd
'scsc /t:exe /out:a.exe SomeFile.cs & a.exe
)Если ваша команда доступна в cmd.exe (что-то похожее на
python ./script.py
команду PowerShell, но не на нееii .
(это означает открыть текущий каталог с помощью проводника)), вы можете запустить cmd.exe в PowerShell. Синтаксис такой:Здесь
&&
представлен синтаксис cmd, описанный в этом вопросе .источник
Я попробовал эту последовательность команд в PowerShell:
Первый тест
($MyVar -ne $null)
вернул истину, а(Get-Content $MyVar)
также вернул истину .Второй тест
($MyVar -ne $null)
вернул ложь и до сих пор я должен предположить, что(Get-Content $MyVar)
тоже вернул ложь .Третий тест доказал, что второе условие даже не анализировалось.
($MyVar -ne $null)
вернул false и доказал, что второе условие(Get-Content "C:\MyTxt.txt")
никогда не выполнялось, вернув false во всей команде.источник
Очень старый вопрос, но для новичков: возможно, версия PowerShell (похожая, но не эквивалентная ), которую ищет вопрос, заключается
-and
в следующем:(build_command) -and (run_tests_command)
источник
&&
, как будто игнорирует код выходаbuild_command
.;
эквивалентно&
в cmd и;
в bash. Это определенно не так, как&&
в cmdЭто зависит от контекста, но вот пример «-and» в действии:
Таким образом, все файлы размером более 10 КБ попадают в каталог, имя файла которого начинается с «f».
источник
Он немного длиннее, чем "&&", но выполняет то же самое без сценариев и не слишком сложен для запоминания. Лучше поздно, чем никогда. :)
источник
Start-Process
неправильный инструмент, используемый для вызова утилит командной строки в целом. В частности, как здесь используется, асинхронноStart-Process
запускаетсяfilename1.exe
в новом окне консоли и ничего не возвращает , что в логическом контексте соответствует$false
. Даже если вы опуститеStart-Process
(то есть как вы должны вызывать утилиты командной строки - напрямую), подход будет неудачным, потому что результат условного зависит от того, произвела ли утилита какой-либо вывод stdout, который не имеет гарантированной связи с тем, удалось или нет.Я думаю, что простое заявление if может сделать это. Как только я увидел ответ mkelement0 выше, что последний статус выхода хранится в $?, Я собрал следующее:
Так что для примера оп, это будет:
источник
Подробный эквивалент состоит в том, чтобы объединить
$LASTEXITCODE
и-eq 0
:Я не уверен, почему
if ($?)
у меня не получилось, но этот сработал.источник
Мы можем попробовать эту команду вместо использования && метода
попробуй {имя хоста; if ($ lastexitcode -eq 0) {ipconfig / all | findstr / i bios}} catch {echo err} finally {}
источник
try
/catch
, потому что он нужен только для завершения ошибок, какие внешние утилиты, такие какhostname
,ipconfig
иfindstr
не могут вызвать. Проверка$LASTEXITCODE
необходима только в том случае, если вы хотите знать конкретный код выхода, установленный внешней утилитой - абстрактный успех или неудача отражается$?
, как и в собственных командлетах.&&
Unix во многом похож на try / catch, так как он не требует, чтобы вы заключали последующие команды в новый блок (то есть}
), когда вы закорачиваете более поздние команды (пропускайте их). Я думаю, чтоAmpAmp
функция / фильтр, который выбрасывает, когдаif (!?) { throw "last command failed" }
будет очень полезной заменой для портирования&&
в PowerShell. использование :csc /t:exe /out:a.exe SomeFile.cs; AmpAmp; a.exe