使用get childitem-在powershell中递归,但在单独的一行中获取每个完整路径(无额外的目录行)

使用get childitem-在powershell中递归,但在单独的一行中获取每个完整路径(无额外的目录行),powershell,format,get-childitem,Powershell,Format,Get Childitem,如果我执行,例如 Get-ChildItem *.ext -recurse 输出由一系列目录组成:条目,每个匹配文件后跟一个条目。这对于许多目的都很有用,但今天我想要一个类似于Unix find命令的结果,在这个命令中,每个匹配的文件都单独显示在一行上,并显示其完整的相对路径,而不显示其他行 我搜索了一些,但没有找到解决方案。使用-Relative开关可以显示一组路径的相对路径。您可以从Get-ChildItem命令收集完整路径名FullName属性,并使用成员访问操作符。仅获取路径值 Re

如果我执行,例如

Get-ChildItem *.ext -recurse 
输出由一系列目录组成:条目,每个匹配文件后跟一个条目。这对于许多目的都很有用,但今天我想要一个类似于Unix find命令的结果,在这个命令中,每个匹配的文件都单独显示在一行上,并显示其完整的相对路径,而不显示其他行

我搜索了一些,但没有找到解决方案。

使用-Relative开关可以显示一组路径的相对路径。您可以从Get-ChildItem命令收集完整路径名FullName属性,并使用成员访问操作符。仅获取路径值

Resolve-Path -Path (Get-ChildItem -Filter *.ext -Recurse).FullName -Relative
注意:此处的相对路径仅准确反映当前目录Get-ChildItem-Path中找到的文件,即Get-ChildItem-Path NotCurrentDirectory可能会产生不希望的结果。

的-Name开关可执行以下操作:

它输出可能包括subdir的相对路径。作为字符串类型[string]的匹配文件的组件。 注意,我使用了-Filter,这大大加快了遍历速度

警告:从PowerShell 7.0开始,-Name存在性能问题和行为怪癖;请参阅以下GitHub问题:


默认情况下,Get Childitem输出在某个xml格式文件中定义的格式表的视图

get-childitem | format-table
显示要输出的对象中的实际属性。另见。然后你可以挑选你想要的。这将给出完整的路径名:

get-childitem | select fullname
如果希望输出仅为字符串而不是对象:

get-childitem | select -expand fullname
get-childitem | foreach fullname

谢谢你的各种建议。我很好奇,其中一些会导致我的Powershell PSVersion:5.1.18362.145中出现空输出

我尝试了其中一些方法,并在其中一些方法的启发下,找到了目前最适合我的案例的答案:

Get ChildItem*.ext-递归|选择对象-属性全名


当我把窗户开得足够宽时,我得到了我需要的所有信息;一般来说,我想我可能需要做更多的工作来获得我想要的格式。

如果你想要相对路径,你可以只做Resolve Path get ChildItem*.ext-recurse.FullName-relative.谢谢!我在发帖之前就试过了,现在读了你的建议,但是我没有得到任何结果。我不知道会出什么问题。@TimHanson:这很神秘。-Name开关至少从v2开始就受到支持,它完全符合您的要求。没有输出表明没有匹配的文件。你的目标是正确的目录吗?在您的问题中使用-Path*.ext与使用*.ext相同,而不是-Filter*.ext会有区别吗?如果您只需要路径字符串,请使用-ExpandProperty而不是-Property,如js2010的答案所示。但是,如上所述,-Name开关应该直接执行您想要的操作-尽管请注意我在回答中添加的问题列表。另外,请注意,此解决方案输出完整的绝对路径,尽管你的问题至少在一定程度上让你听起来像是在寻找相对的完整相对路径。尽管Get-ChildItem-Name应该在这里就足够了,但这是一个通常需要了解的简便技巧。请注意,当前无法指定引用目录。使用Resolve Path-Relative:路径总是相对于当前目录进行解析。见尼斯概述;问题是完全相对路径有点模糊,所以要澄清一下:这些解决方案提供的是完整路径,而不是相对路径。对于这种模糊性,我很抱歉。我更喜欢相对路径,尽管full会很好,并使用full-relative明确表示我希望整条路径在行上,而不是在行上单独拆分目录,根据Powershell默认,文件名仅在文件条目行上。
get-childitem | select fullname
get-childitem | select -expand fullname
get-childitem | foreach fullname