Penggantian untuk ampersand dan double-ampersand di PowerShell

28

Dalam prosesor CMD Windows asli, Anda dapat menggunakan &untuk merangkai perintah bersama sehingga satu berjalan segera setelah yang lain. A &&akan menjalankan perintah kedua hanya jika yang pertama selesai tanpa kesalahan.

Ini berbeda dari perintah perpipaan bersama dengan |dalam bahwa output dari perintah pertama tidak dikirim ke perintah kedua, perintah hanya menjalankan satu demi satu dan output untuk masing-masing dikirim ke tempat biasanya.

Namun, saya mendapatkan kesalahan saat mencoba menggunakan &atau &&di PowerShell. Apakah ada fungsi serupa yang tersedia di PowerShell, atau apakah fitur ini tidak digunakan lagi?

Iszi
sumber
3
Ini mungkin membantu: Apa yang setara dengan PowerShell dari Bash's && dan || operator?
Gilles 'SO- stop being evil'
Sebuah pertanyaan yang menarik adalah apakah metaprogramming powershell dapat digunakan untuk menyediakan fungsionalitas ini menggunakan&&
soandos

Jawaban:

35

The &operator dalam PowerShell hanyalah ;atau Titik koma.

The &&operator dalam PowerShell harus dijalankan sebagai ifpernyataan.

Command ; if($?) {Command}

SS4Soku
sumber
1

Coba fungsi ini, yang dapat digunakan kira-kira dengan cara yang sama:

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

Sekarang &&bisa diganti dengan ; aa, yang sementara masih belum sempurna jauh lebih ringkas.

cls && build

menjadi

cls; aa build
dipangkas
sumber
1
Adakah alasan non-gaya mengapa Anda menggunakan args[0]dan tidak function aa ($cmd)?
ruffin
Ini adalah cara yang rapuh untuk menjalankan perintah; menggunakan blok skrip untuk meneruskan perintah, dan menjalankannya dengan ., bukan &, karena yang terakhir membuat lingkup anak untuk variabel.
mklement0