是否可以将PowerShell命令行拆分为多行?
在Visual Basic中,我可以在下一行中使用下划线(_)来继续命令。
是否可以将PowerShell命令行拆分为多行?
在Visual Basic中,我可以在下一行中使用下划线(_)来继续命令。
当前回答
这是一个老帖子,所以这是现代的方法。
如果您不使用遗留的powershell,那么延续行最干净的方法是在行开始处使用管道。
注意:该命令不会将某些行注释掉。这在命令行中非常有用。
> Get-ChildItem -path 'c:\' -Depth 1
| Sort-Object LastWriteTime
# | Sort-Object Length -Descending
| Select-Object -First 3 -Skip 3
| Foreach-Object {
$_.Name, $_.Length | Join-String -Separator ' = '
}
输出:
explorer.exe = 4826160
procexp.old.exe = 2925760
RtlExUpd.dll = 2839488
Windows Powershell(版本< 6)
不幸的是,windows powershell不支持它。上面链接了一堆替代方案。你可以完全删除反勾号:2017/07/ byye - byye -backtick-natural-line
其他回答
在大多数类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
我假设您谈论的是命令行——如果是在脚本中,那么new-line充当命令分隔符。
在命令行中,使用分号';'
在PowerShell和PowerShell ISE中,也可以在每行末尾使用Shift + Enter进行多行编辑(而不是标准的反引号')。
在powershell中有很多方法来继续一行,用管道,括号,圆括号,操作符,点,甚至用逗号。这里有一个关于它的博客:https://get-powershellblog.blogspot.com/2017/07/bye-bye-backtick-natural-line.html
你也可以在foreach和if语句之后继续。