当前位置: 首页 > 知识库问答 >
问题:

PowerShell脚本,用于写出无根目录的递归文件列表

崔棋
2023-03-14

在检索目录中的递归文件列表时,是否有一种简单的方法来剥离根目录?

例如

Get-ChildItem -Recurse "C:\Test\Folder" | Where { ! $_.PSIsContainer } | Select FullName | Out-File "C:\Test\Folder\items.txt"

但不是这个给我:

 C:\Test\Folder\shiv.png
 C:\Test\Folder\Another\kendall.png
 C:\Test\Folder\YetAnother\roman.png

它给了我:

 Folder\shiv.png
 Folder\Another\kendall.png
 Folder\YetAnother\roman.png

这是可能在一行中还是我必须写一个循环?

还有一种输出方法,它不会在线条之间创建间隙,也不会在顶部显示select属性的名称吗?(在本例中为“全名”),还是我只需手动循环并忽略它们?

共有2个答案

鲁阳焱
2023-03-14

这符合您的要求:

Get-ChildItem -Recurse "C:\Test\Folder" | Where { ! $_.PSIsContainer } | Select -ExpandProperty FullName | % { $_.Split("\")[2..1000] -Join "\" }

输出:

Folder\shiv.png
Folder\Another\kendall.png
Folder\YetAnother\roman.png

说明:Get ChildItem的结果在返回数组的字符上拆分。下一位将数组从元素2(以及数组的其余部分)切片到指定的数字,因此只需取一个足够大的数字即可。最后,我们使用join操作符将数组连接到一个新字符串中。

冯祺
2023-03-14

您在“间隙”方面遇到的问题是由于Powershell在显示对象时的格式。如果您想获取纯值,您可以使用-扩充属性开关:

select -Expand FullName

至于你的问题,你可以这样做:

$dir = "C:\Test\Folder"
Get-ChildItem $dir -Recurse -File | foreach {
    $_.FullName.Replace("$dir\", "")
} | Out-File "C:\Test\Folder\items.txt"

请注意,这将区分大小写。如果这是一个问题,您可以使用正则表达式:

$dir = "d:\tmp"
$pattern = [Regex]::Escape($dir) + "\\?"
Get-ChildItem $dir -Recurse -File | foreach {
    $_.FullName -replace $pattern, ""
}
 类似资料:
  • 问题内容: 我有此功能,以递归方式打印目录中所有文件的名称。问题是我的代码很慢,因为它每次迭代都必须访问远程网络设备。 我的计划是先从目录中递归加载所有文件,然后再使用正则表达式遍历所有文件,以过滤掉我不需要的所有文件。有谁有更好的建议? 这只是稍后的测试,我将不使用这样的代码,而是将与高级正则表达式匹配的每个文件的路径和修改日期添加到数组中。 问题答案: 假设这是你将要编写的实际生产代码,那么我

  • 我想列出指定目录中的所有文件以及该目录中的子目录。不应列出任何目录。 我该怎么解决这个?

  • 问题内容: 假设我有一个目录中,其中有3个符号连接其他目录 ,和。我想列出中的所有文件,包括在那些,和。 为了更通用,我想列出所有文件,包括目录中的符号链接文件。,等停止在符号链接上,而无需导航到它们以进一步列出。 问题答案: 该选项将完成您想要的。它取消引用符号链接。 因此,您的命令将是: 您也可以使用 该选项指示find跟随符号链接到目录。 在Mac OS X上使用 如已弃用。

  • 本文向大家介绍PowerShell脚本写的文件.ps1文件介绍,包括了PowerShell脚本写的文件.ps1文件介绍的使用技巧和注意事项,需要的朋友参考一下 .ps1文件是PowerShell写好的脚本文件。在Windows系统中,默认情况下是不允许执行.ps1文件的,那么怎么才能让系统允许执行.ps1文件呢? 什么是“.ps1”文件? 这个是PowerShell写的脚本文本,你可以在记事本中写

  • 问题内容: 我正在尝试获取目录中所有文本文件的名称。如果目录中包含子目录,那么我也想在这些子目录中获取任何文本文件。我不确定如何继续执行任意数量的子目录。 现在,下面的代码仅获取当前目录中的所有文本文件以及该目录中的子目录。对于找到的每个子目录,它还会找到任何文本文件和更深的子目录。问题是,如果那些更深的子目录还有更深的子目录,那么我找不到所有的文本文件。这似乎是一个需要递归的问题,因为我不知道它

  • 问题内容: 这类似于这个问题,但是我想在Unix中包括相对于当前目录的路径。如果我执行以下操作: 它不包括完整路径。例如,我具有以下目录结构: 上面的代码将返回: 如何使用标准Unix命令使其包含相对于当前目录的路径? 问题答案: 使用查找: 在使用GNU find的系统上,像大多数GNU / Linux发行版一样,您可以省略-print。