是否可以将PowerShell命令行拆分为多行?
在Visual Basic中,我可以在下一行中使用下划线(_)来继续命令。
是否可以将PowerShell命令行拆分为多行?
在Visual Basic中,我可以在下一行中使用下划线(_)来继续命令。
当前回答
只要在这里加上一个极端情况。这可能会帮你节省5分钟。如果你使用一连串的动作,你需要在行末加上“。”,然后在“'”后面留下一个空格(反勾号)。这是我很不容易才发现的。
$yourString = "HELLO world! POWERSHELL!". `
Replace("HELLO", "Hello"). `
Replace("POWERSHELL", "Powershell")
其他回答
我假设您谈论的是命令行——如果是在脚本中,那么new-line充当命令分隔符。
在命令行中,使用分号';'
你可以在空格后面加严肃重音(反撇号):
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'
然后,它们在字符串中包含换行符。
在大多数类c语言中,我都会将大括号放在我认为最容易阅读的地方。
PowerShell的解析器可以识别语句是否明显不完整,并查看下一行。例如,想象一个cmdlet,它接受一个可选的脚本块参数:
Get-Foo { ............ }
如果脚本块非常长,你可能想写:
Get-Foo { ............... ............... ............... }
但这行不通:解析器将看到两条语句。第一个是Get-Foo,第二个是脚本块。相反,我写道:
Get-Foo { ............... ............... ............... }
我可以使用行延续字符('),但这会导致代码难以阅读,并引发错误。
因为这个例子要求左大括号在前一行,所以我到处都遵循这个模式:
if (condition) { ..... }
注意,如果语句需要语言语法中的脚本块,那么解析器将在下一行中查找脚本块,但为了一致性,我将左大括号保持在同一行中。
类似地,在长管道的情况下,我在管道字符(|)之后中断:
$project.Items | ? { $_.Key -eq "ProjectFile" } | % { $_.Value } | % { $_.EvaluatedInclude } | % { ......... }
在windows终端(powershell配置文件),我可以简单地单击Shift-Enter对我来说很好。
PS C:\xxx2021> Get-ChildItem -Include *remote* -Recurse |
>> Sort-Object -Property LastWriteTime -Descending |
>> Select-Object LastWriteTime, Name -First 25
LastWriteTime Name
------------- ----
12/5/2021 5:04:02 PM remote-control-car-BatteryPack-Number-2021-12-03.pdf
PS C:\xxx2021>enter code here
只要在这里加上一个极端情况。这可能会帮你节省5分钟。如果你使用一连串的动作,你需要在行末加上“。”,然后在“'”后面留下一个空格(反勾号)。这是我很不容易才发现的。
$yourString = "HELLO world! POWERSHELL!". `
Replace("HELLO", "Hello"). `
Replace("POWERSHELL", "Powershell")