是否可以将PowerShell命令行拆分为多行?
在Visual Basic中,我可以在下一行中使用下划线(_)来继续命令。
是否可以将PowerShell命令行拆分为多行?
在Visual Basic中,我可以在下一行中使用下划线(_)来继续命令。
当前回答
你可以在空格后面加严肃重音(反撇号):
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'
然后,它们在字符串中包含换行符。
其他回答
扩展一下克里斯托巴利托的回答:
我假设您谈论的是命令行——如果是在脚本中,那么新行>充当命令分隔符。 在命令行中,使用分号';'
例如:
在命令行上签署PowerShell脚本。没有换行。
powershell -Command "&{$cert=Get-ChildItem –Path cert:\CurrentUser\my -codeSigningCert ; Set-AuthenticodeSignature -filepath Z:\test.ps1 -Cert $cert}
我假设您谈论的是命令行——如果是在脚本中,那么new-line充当命令分隔符。
在命令行中,使用分号';'
在大多数类c语言中,我都会将大括号放在我认为最容易阅读的地方。
PowerShell的解析器可以识别语句是否明显不完整,并查看下一行。例如,想象一个cmdlet,它接受一个可选的脚本块参数:
Get-Foo { ............ }
如果脚本块非常长,你可能想写:
Get-Foo { ............... ............... ............... }
但这行不通:解析器将看到两条语句。第一个是Get-Foo,第二个是脚本块。相反,我写道:
Get-Foo { ............... ............... ............... }
我可以使用行延续字符('),但这会导致代码难以阅读,并引发错误。
因为这个例子要求左大括号在前一行,所以我到处都遵循这个模式:
if (condition) { ..... }
注意,如果语句需要语言语法中的脚本块,那么解析器将在下一行中查找脚本块,但为了一致性,我将左大括号保持在同一行中。
类似地,在长管道的情况下,我在管道字符(|)之后中断:
$project.Items | ? { $_.Key -eq "ProjectFile" } | % { $_.Value } | % { $_.EvaluatedInclude } | % { ......... }
你可以在空格后面加严肃重音(反撇号):
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'
然后,它们在字符串中包含换行符。
我刚刚发现,在后勾号和换行符之间一定没有任何字符。即使是空格也会导致命令不起作用。