You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell递归列举文件去除根目录及优化输出的实现方案

PowerShell路径裁剪与文件输出问题解决方案

1. 去除根目录前缀的单行实现

无需编写循环,可直接通过单行命令实现需求,示例代码如下:

# 固定根目录前缀写法
(Get-ChildItem -Recurse "C:\Test\Folder" -File).FullName -replace '^C:\\Test\\', '' | Set-Content "C:\Test\Folder\items.txt"

代码说明:

  • 使用-File参数替代Where { ! $_.PSIsContainer }筛选文件,是PowerShell 3.0及以上版本原生支持的语法,写法更简洁
  • 直接读取所有文件的FullName字符串属性组成数组,通过-replace批量匹配路径开头的C:\Test\前缀并删除,即可得到符合要求的相对路径格式
  • 如需避免硬编码前缀,可使用动态前缀匹配的写法,修改根目录路径时无需调整替换规则:
$root = "C:\Test\Folder"; (Get-ChildItem -Recurse $root -File).FullName -replace "^$([regex]::Escape((Split-Path $root -Parent) + '\'))", '' | Set-Content "$root\items.txt"

2. 规避输出空行、属性名的实现

之前输出出现属性名、多余空行的核心原因是Select FullName返回的是带FullName属性的自定义对象,配合Out-File写入时会保留PowerShell的对象格式化输出内容(包括属性表头、空行分隔符)。
无需编写循环,调整输出方式即可解决:

  • 直接读取字符串类型的FullName属性,而非通过Select返回结构化对象
  • 使用Set-Content替代Out-File写入文件,写入纯字符串数组时会逐行写入内容,不会添加额外空行,也不会输出属性表头
    如需兼容更低版本PowerShell,也可以使用ForEach-Object逐行处理,效果一致:
Get-ChildItem -Recurse "C:\Test\Folder" -File | ForEach-Object { $_.FullName -replace '^C:\\Test\\', '' } | Set-Content "C:\Test\Folder\items.txt"

内容的提问来源于stack exchange,提问作者jimbo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:57:02