Cómo ingresar un comando de varias líneas

Resuelto eXXL asked hace 14 años • 15 respuestas

¿Es posible dividir una línea de comando de PowerShell en varias líneas?

En Visual Basic puedo usar el guión bajo ( _) para continuar el comando en la siguiente línea.

eXXL avatar Jul 13 '10 16:07 eXXL
Aceptado

Puedes utilizar un espacio seguido del acento grave (comilla invertida):

Get-ChildItem -Recurse `
  -Filter *.jpg `
  | Select LastWriteTime

Sin embargo, esto sólo es necesario en los casos como se muestra arriba. Por lo general, obtiene una continuación de línea automática cuando un comando no puede completarse sintácticamente en ese punto. Esto incluye iniciar un nuevo elemento de canalización:

Get-ChildItem |
  Select Name,Length

funcionará sin problemas ya que después del |comando no se puede completar porque falta otro elemento de canalización. También abrir llaves o cualquier otro tipo de paréntesis permitirá la continuación de la línea directamente:

$x=1..5
$x[
  0,3
] | % {
  "Number: $_"
}

De forma similar a la |coma, también funcionará en algunos contextos:

1,
2

Sin embargo, tenga en cuenta que, de manera similar a la inserción automática de punto y coma de JavaScript , hay algunas cosas que están igualmente rotas porque el salto de línea ocurre en un punto donde está precedido por una declaración válida:

return
  5

no trabajará.

Finalmente, las cadenas (en todas las variedades) también pueden extenderse más allá de una sola línea:

'Foo
bar'

Entonces incluyen los saltos de línea dentro de la cadena.

Joey avatar Jul 13 '2010 09:07 Joey

No debe haber ningún carácter entre el acento grave y el salto de línea. Incluso los espacios en blanco harán que el comando no funcione.

Neffets avatar Aug 06 '2012 12:08 Neffets

En la mayoría de los lenguajes tipo C, soy consciente de colocar las llaves donde creo que hacen que el código sea más fácil de leer.

El analizador de PowerShell reconoce cuando una declaración claramente no está completa y busca en la siguiente línea. Por ejemplo, imagine un cmdlet que toma un parámetro de bloque de secuencia de comandos opcional:

    Get-Foo { ............ }

Si el bloque de script es muy largo, es posible que desees escribir:

    Get-Foo
    {
        ...............
        ...............
        ...............
    }

Pero esto no funcionará: el analizador verá dos declaraciones. El primero es Get-Fooy el segundo es un bloque de guión. En cambio, escribo:

    Get-Foo {
        ...............
        ...............
        ...............
    }

Podría usar el carácter de continuación de línea (`), pero eso hace que el código sea difícil de leer y provoca errores.

Debido a que este caso requiere que la llave abierta esté en la línea anterior, sigo ese patrón en todas partes:

    si (condición) {
        .....
    }

Tenga en cuenta que iflas declaraciones requieren un bloque de secuencia de comandos en la gramática del idioma, por lo que el analizador buscará el bloque de secuencia de comandos en la siguiente línea, pero por coherencia, mantengo la llave abierta en la misma línea.

De manera similar, en el caso de tuberías largas, me rompo después del carácter de tubería ( |):

    $proyecto.Artículos |
        ? { $_.Key -eq "ArchivoProyecto" } |
        % { $_.Valor } |
        % { $_.EvaluatedInclude } |
        % {
            .........
        }
Jay Bazuzi avatar Jul 13 '2010 15:07 Jay Bazuzi

Para ampliar la respuesta de cristobalito :

Supongo que estás hablando de la línea de comandos: si está en un script, entonces una nueva línea > actúa como delimitador de comandos.

En la línea de comando, utilice un punto y coma ';'

Por ejemplo:

Firme un script de PowerShell en la línea de comandos. Sin saltos de línea.

powershell -Command "&{$cert=Get-ChildItem –Path cert:\CurrentUser\my -codeSigningCert ; Set-AuthenticodeSignature -filepath Z:\test.ps1 -Cert $cert}
Alex avatar Feb 08 '2012 13:02 Alex

En PowerShell y PowerShell ISE, también es posible usar Shift+ Enteral final de cada línea para la edición de varias líneas (en lugar del acento grave estándar `).

Bad avatar Feb 03 '2016 14:02 Bad