如何用PowerShell查找同名的Zip文件与文件夹?
解决方法
要查找存储阵列中同名的Zip文件与对应的解压文件夹,你可以用以下两种PowerShell方案:
方案一:直接遍历Zip文件检查对应文件夹
这个方法逻辑直观,只扫描Zip文件,然后验证同目录下是否存在同名文件夹,输出匹配的路径对:
Get-ChildItem -Path "c:\temp\test" -Recurse -Filter "*.zip" -File | ForEach-Object { $targetFolder = Join-Path -Path $_.DirectoryName -ChildPath $_.BaseName if (Test-Path -Path $targetFolder -PathType Container) { [PSCustomObject]@{ Zip文件路径 = $_.FullName 同名文件夹路径 = $targetFolder } } }
方案二:分组筛选同时包含Zip文件和文件夹的组合
基于你原来的代码逻辑优化,通过自定义分组键,筛选出同时存在Zip文件和同名文件夹的分组:
Get-ChildItem -Path "c:\temp\test" -Recurse | Group-Object -Property @{Name = "匹配键"; Expression = { Join-Path $_.DirectoryName $_.BaseName } } | Where-Object { $_.Group.Where({ $_.PSIsContainer }).Count -ge 1 -and $_.Group.Where({ !$_.PSIsContainer -and $_.Extension -eq '.zip' }).Count -ge 1 } | Select-Object @{Name = "Zip文件路径"; Expression = { $_.Group.Where({ !$_.PSIsContainer -and $_.Extension -eq '.zip' }).FullName } }, @{Name = "同名文件夹路径"; Expression = { $_.Group.Where({ $_.PSIsContainer }).FullName } }
原代码问题说明
你原来的代码会把同目录下所有BaseName相同的项(包括不同类型的文件)分组,但没有筛选出同时包含Zip文件和文件夹的分组,所以可能会出现很多无关的分组(比如同名的txt和zip文件)。上述方案通过针对性筛选,只保留符合你需求的Zip文件与文件夹组合。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

