PowerShell如何递归显示目录及子目录(排除指定根目录)仅展示目录名
PowerShell递归显示目录并排除指定目录的解决方案
原脚本的核心问题是未限定仅获取目录,且使用了针对文件的-include "*.*"参数,导致输出包含所有文件。以下是修正后的方案:
修正后的脚本
Get-ChildItem -Path "C:\" -Directory -Recurse | Where-Object { $_.FullName -notlike "C:\Pictures\*" } | ForEach-Object { Add-Content -Path "C:\result.txt" -Value $_.FullName }
关键说明
-Directory:直接指定只返回目录对象,彻底避免输出文件,这是解决原问题的核心调整- 保留
Where-Object过滤逻辑:-Exclude参数仅对当前路径下的顶级项生效,递归遍历子目录时无法准确排除指定目录的所有子项,用$_.FullName -notlike可以精准过滤掉C:\Pictures及其所有子目录 - 如果需要排除多个根目录下的目录,可以扩展过滤条件:
# 排除多个目录示例 Get-ChildItem -Path "C:\" -Directory -Recurse | Where-Object { $_.FullName -notlike "C:\Pictures\*" -and $_.FullName -notlike "C:\Videos\*" } | ForEach-Object { Add-Content -Path "C:\result.txt" -Value $_.FullName } - 也可使用正则表达式简化多目录排除:
Get-ChildItem -Path "C:\" -Directory -Recurse | Where-Object { $_.FullName -notmatch "^C:\\(Pictures|Videos)\\.*" } | ForEach-Object { Add-Content -Path "C:\result.txt" -Value $_.FullName }
内容的提问来源于stack exchange,提问作者Jean
相关产品推荐
相关产品推荐

