Sostituzioni per e commerciale e doppia e commerciale in PowerShell


28

Nel processore CMD nativo di Windows, è possibile utilizzare &per mettere insieme i comandi in modo che uno venga eseguito immediatamente dopo l'altro. A &&eseguirà il secondo comando solo se il primo viene completato senza errori.

Ciò è diverso dai comandi di piping insieme al fatto |che l'output del primo comando non viene inviato al secondo comando, i comandi vengono semplicemente eseguiti uno dopo l'altro e l'output per ciascuno viene inviato nella sua posizione normale.

Tuttavia, viene visualizzato un errore quando provo a utilizzare &o &&in PowerShell. Esistono funzioni simili disponibili in PowerShell o questa funzione è obsoleta?



Una domanda interessante è se la metaprogrammazione di PowerShell potrebbe essere usata per fornire questa funzionalità usando&&
soandos,

Risposte:


35

L' &operatore in PowerShell è solo il punto ;e virgola.

L' &&operatore in PowerShell deve essere eseguito come ifun'istruzione.

Command ; if($?) {Command}


1

Prova questa funzione, che può essere utilizzata più o meno allo stesso modo:

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

Ora &&può essere sostituito con ; aa, che sebbene non sia perfetto è molto più conciso.

cls && build

diventa

cls; aa build

1
Qualche motivo non stilistico per cui stai usando args[0]e non function aa ($cmd)?
ruffin,

Questo è un modo fragile per invocare i comandi; usare i blocchi di script per passare i comandi e invocare quelli con ., non &perché quest'ultimo crea un ambito figlio per le variabili.
mklement0,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.