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


28

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

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

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



Интересный вопрос заключается в том, можно ли использовать метапрограммирование powershell для обеспечения этой функциональности с помощью&&
soandos

Ответы:


35

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

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

Command ; if($?) {Command}


1

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

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

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

cls && build

становится

cls; aa build

1
Любая не стилистическая причина, почему вы используете, args[0]а не function aa ($cmd)?
Ерф

Это хрупкий способ вызывать команды; используйте блоки сценариев для передачи команд и вызывайте их с помощью ., а не &потому, что последний создает дочернюю область для переменных.
mklement0
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.