Заміни на амперсанд та подвійні амперсанди в PowerShell


26

У рідному процесорі 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)?
ruffin

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