为了账号安全,请及时绑定邮箱和手机立即绑定

如何输入多行命令

/ 猿问

如何输入多行命令

ABOUTYOU 2019-10-06 14:51:26

是否可以将PowerShell命令行分成多行?

在Visual Basic中,我可以使用下划线(_)在下一行中继续该命令。


查看完整描述

3 回答

?
墨色风雨

您可以使用带有重音符号(反勾号)的空格:


Get-ChildItem -Recurse `

  -Filter *.jpg `

  | Select LastWriteTime

但是,仅在上述情况下才需要这样做。通常,当命令在语法上无法完全完成时,您会获得自动的行连续性。这包括启动新的管道元素:


Get-ChildItem |

  Select Name,Length

可以正常工作,因为在|命令之后由于缺少另一个管道元素而无法完成。同样,打开花括号或任何其他种类的括号也可以直接继续行:


$x=1..5

$x[

  0,3

] | % {

  "Number: $_"

}

与|逗号类似,在某些情况下也可以使用:


1,

2

请记住,虽然,类似于JavaScript的自动分号插入,也有一些事情,也同样打破,因为线路中断发生在那里的一个点是由一个有效的声明之前:


return

  5

不管用。


最后,字符串(在所有变体中)也可能会超出一行:


'Foo

bar'

然后,它们在字符串中包括换行符。


查看完整回答
反对 回复 2019-10-06
?
弑天下

扩展cristobalito的答案:


我假设您是在命令行上谈论的-如果它在脚本中,则换行>充当命令定界符。


在命令行上,使用分号“;”


例如:


在命令行上签名PowerShell脚本。没有换行符。


powershell -Command "&{$cert=Get-ChildItem –Path cert:\CurrentUser\my -codeSigningCert ; Set-AuthenticodeSignature -filepath Z:\test.ps1 -Cert $cert}


查看完整回答
反对 回复 2019-10-06
?
喵喵时光机

在大多数类似C的语言中,我故意将花括号放在我认为它们使代码最容易阅读的位置。


PowerShell的解析器识别出明显没有完成的语句,然后转到下一行。例如,想象一个带有可选脚本块参数的cmdlet:


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

如果脚本块很长,则可能需要编写:


    Get-Foo

    {

        ......

        ......

        ......

    }

但这是行不通的:解析器将看到两个语句。第一个是Get-Foo,第二个是脚本块。相反,我写道:


    Get-Foo {

        ......

        ......

        ......

    }

我可以使用换行符(`),但这会使代码难以阅读,并引发bug。


因为这种情况要求开放括号在上一行,所以我到处都遵循这种模式:


    如果(条件){

        .....

    }

请注意,if语句需要使用语言语法中的脚本块,因此解析器将在脚本块的下一行中查找,但是为了保持一致,我将大括号放在同一行上。


同样,在长管道的情况下,我在管道字符(|)之后中断:


    $ project.Items | 

        ?{$ _。Key -eq“ ProjectFile”} |

        %{$ _。Value} | 

        %{$ _。EvaluatedInclude} |

        %{

            ......

        }


查看完整回答
反对 回复 2019-10-06

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信