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

如何用Get-ChildItem递归查找JPG并跳过指定父文件夹内的文件

解决Get-ChildItem仅递归子文件夹并跳过当前目录文件的问题

我懂你的需求——你要在D:\Images\$YM\$YMD\$USERNAME这个路径下,只抓取用户名文件夹子文件夹里的.jpg文件,完全忽略该文件夹根目录下的同名文件对吧?这里有两个实用的实现方式,你可以根据场景选择:

方法一:先递归再过滤路径

这种方法先一次性递归所有.jpg文件,再通过路径过滤掉根目录下的文件,写法简洁:

# 安全拼接目标路径(推荐用Join-Path避免手动拼接的路径错误)
$targetPath = Join-Path -Path 'D:\Images' -ChildPath "$local:YM\$local:YMD\$env:USERNAME"

# 递归查找所有.jpg,再过滤出不在根目录的文件
Get-ChildItem -Path $targetPath -Filter '*.jpg' -Recurse | Where-Object {
    $_.Directory.FullName -ne $targetPath
}

原理很简单:$_.Directory.FullName会拿到当前文件所在的文件夹路径,只要这个路径不等于我们的目标根路径,就说明文件在子文件夹里,符合要求。

方法二:直接遍历子文件夹再递归

如果你的用户名文件夹根目录下有大量非目标文件,这种方法效率更高——先获取所有子文件夹,再在每个子文件夹里递归查找:

$targetPath = Join-Path -Path 'D:\Images' -ChildPath "$local:YM\$local:YMD\$env:USERNAME"

# 先拿到目标路径下的所有子文件夹,再逐个递归找.jpg
Get-ChildItem -Path $targetPath -Directory | ForEach-Object {
    Get-ChildItem -Path $_.FullName -Filter '*.jpg' -Recurse
}

这种方式天然跳过了根目录的文件,因为我们根本没在根目录执行查找操作,直接从子文件夹开始处理。

小提示

不管用哪种方法,都推荐用Join-Path来拼接路径,它会自动处理Windows路径的分隔符问题,避免手动拼接时出现的格式错误(比如多一个斜杠或者少一个斜杠)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:14:55