Замены для амперсанда и двойного амперсанда в PowerShell

28

В родном CMD-процессоре Windows вы можете использовать &для объединения команд так, чтобы одна выполнялась сразу после другой. A &&выполнит вторую команду, только если первая завершится без ошибок.

Это отличается от передачи команд по конвейеру |тем, что выходные данные первой команды не отправляются второй команде, команды просто запускаются одна за другой, а выходные данные каждой из них отправляются на свое обычное место.

Тем не менее я получаю сообщение об ошибке при попытке использовать &или &&в PowerShell. Существуют ли похожие функции в PowerShell или эта функция устарела?

Iszi
источник
3
Это может помочь: каков PowerShell-эквивалент Bash's && и || операторы?
Жиль "ТАК - перестать быть злым"
Интересный вопрос заключается в том, можно ли использовать метапрограммирование powershell для обеспечения этой функциональности с помощью&&
soandos

Ответы:

35

&Оператор в PowerShell это просто ;или Запятая.

&&Оператор в PowerShell должен быть запущен в качестве ifзаявления.

Command ; if($?) {Command}

SS4Soku
источник
1

Попробуйте эту функцию, которую можно использовать примерно так же:

function aa() {
    if($?) {
        $command = [string]::join(' ', $args[1..99])
        & $args[0] $command
    }
}

Теперь &&можно заменить на ; aa, который, хотя все еще не совершенен, является гораздо более кратким.

cls && build

становится

cls; aa build
mopsled
источник
1
Любая не стилистическая причина, почему вы используете, args[0]а не function aa ($cmd)?
Ерф
Это хрупкий способ вызывать команды; используйте блоки сценариев для передачи команд и вызывайте их с помощью ., а не &потому, что последний создает дочернюю область для переменных.
mklement0