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?



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}


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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.