我正在使用以下Powershell命令:
Get-ChildItem -Recurse *.txt
Run Code Online (Sandbox Code Playgroud)
但是,如果有多个结果,则输出将如下所示:
Get-ChildItem -Recurse *.txt
Run Code Online (Sandbox Code Playgroud)
但是我想以某种形式获得分组结果。
可能是这样的:
Directory: C:\TestFolder\myfolder\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- d/m/yyyy hh:MM PM 1234 dragons.txt
Directory: C:\TestFolder\anotherfolder\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- d/m/yyyy hh:MM PM 66550 jabberwocky.txt
Run Code Online (Sandbox Code Playgroud)
或这个:
Mode LastWriteTime Length Directory Name
---- ------------- ------ --------- ----
-a--- d/m/yyyy hh:MM PM 1234 C:\TestFolder\myfolder\ dragons.txt
-a--- d/m/yyyy hh:MM PM 66550 C:\TestFolder\anotherfolder\ jabberwocky.txt
Run Code Online (Sandbox Code Playgroud)
您可能会明白。我如何才能做到这一点,最好以简单而优雅的方式完成?
我试过了,Get-ChildItem -Recurse *.txt | Format-Table但这没什么用。我还检查了Stack Overflow提出的最相关的类似问题(即“ 使用PowerShell的Get-ChildItem递归 ”,以及其他问题),但是到目前为止,还没有能够提炼出解决方案。
附录:
我使用help group并发现它group实际上是我想寻找的Cmdlet的确切别名:Group-Object。如果我这样做:
Length FullPath
------ --------
1234 C:\TestFolder\myfolder\dragons.txt
66550 C:\TestFolder\anotherfolder\jabberwocky.txt
Run Code Online (Sandbox Code Playgroud)
我得到:
Get-ChildItem -Recurse *.txt | Group-Object "FullName"
Run Code Online (Sandbox Code Playgroud)
但这需要我简化一个附加步骤以:
Count Name Group
----- -------- -----
1 C:\TestFold... {C:\TestFolder\myfolder\dragons.txt}
1 C:\TestFold... {C:\TestFolder\anotherfolder\jabberwocky.txt}
Run Code Online (Sandbox Code Playgroud)
得到:
Get-ChildItem -Recurse *.txt | Group-Object "FullName" | Select-Object "Name"
Run Code Online (Sandbox Code Playgroud)
如果我真的想要额外的属性,那么我想我想“对多个属性进行分组”,从而使问题实际上是另一个SO问题的重复。
但是,所有这些“分组”似乎都不过分。有没有直接的方法Get-ChildItem来获取我想要的输出?
PowerShell具有自己的显示方式System.IO.DirectoryInfo和System.IO.FileInfo对象。如果您不想看到它,则只需要使用即可Select-Object。
Get-ChildItem -Recurse c:\temp | select Mode,LastWriteTime,Length,Directory,Name
Run Code Online (Sandbox Code Playgroud)
Group-Object完全没有必要。鉴于您的需要,我想Group-Object似乎很有吸引力,但此处不需要它的功能,就像链接问题中使用的那样。您真正想做的是更改PowerShell处理这些对象的方式。Format-Table由于相同的原因而无法正常工作。它通过设计输出来使用PowerShell并制作一个表。如果您使用调用属性,Format-Table则将具有与相同的解决方案Select-Object。
Get-ChildItem -Recurse c:\temp | Format-Table Mode,LastWriteTime,Length,Directory,Name
Run Code Online (Sandbox Code Playgroud)
请...请...如果要在其他功能中使用输出,请不要使用该行。Format-cmdlet破坏对象,仅用于显示数据。
| 归档时间: |
|
| 查看次数: |
4121 次 |
| 最近记录: |