PowerShell目录比较需求:输出差异项完整路径
PowerShell脚本:比较两个目录并输出完整路径的差异
我特意调整了脚本,不仅能找出两个目录的所有差异(多余/缺失的文件、目录),还会直接输出完整路径,让你一眼就能定位到差异位置。
完整脚本
# 定义要比较的两个目录路径 $dir1 = "C:\Path\To\Test1" $dir2 = "C:\Path\To\Test" # 获取两个目录下的所有项目(包括子目录、文件,含隐藏项) $items1 = Get-ChildItem -Path $dir1 -Recurse -Force -File -Directory | Select-Object -Property FullName, PSIsContainer $items2 = Get-ChildItem -Path $dir2 -Recurse -Force -File -Directory | Select-Object -Property FullName, PSIsContainer # 比较两个目录的项目,基于完整路径匹配 $differences = Compare-Object -ReferenceObject $items1 -DifferenceObject $items2 -Property FullName # 遍历差异结果,分类输出 foreach ($diff in $differences) { # 提取完整路径和类型 $fullPath = $diff.FullName $isDirectory = ($items1 + $items2) | Where-Object { $_.FullName -eq $fullPath } | Select-Object -ExpandProperty PSIsContainer switch ($diff.SideIndicator) { "=>" { # 仅在dir1存在的项目(Test1比Test多的) if ($isDirectory) { Write-Host "✅ 多余目录(仅Test1存在): $fullPath" -ForegroundColor Green } else { Write-Host "✅ 多余文件(仅Test1存在): $fullPath" -ForegroundColor Green } } "<=" { # 仅在dir2存在的项目(Test比Test1多的/Test1缺失的) if ($isDirectory) { Write-Host "❌ 缺失目录(Test1中不存在): $fullPath" -ForegroundColor Red } else { Write-Host "❌ 缺失文件(Test1中不存在): $fullPath" -ForegroundColor Red } } } }
脚本说明
- 路径定义:开头的
$dir1和$dir2替换成你实际要比较的两个目录,比如你的Test1和Test文件夹路径。 - 获取项目:用
Get-ChildItem递归遍历所有子目录和文件,包括隐藏项,同时记录完整路径和是否为目录的属性。 - 比较逻辑:通过
Compare-Object基于完整路径匹配两个目录的项目,避免同名不同路径的误判。 - 分类输出:根据
SideIndicator区分差异方向,同时判断是文件还是目录,用不同颜色和明确的标签输出完整路径,一目了然。
使用方法
- 打开PowerShell,将上述脚本复制进去。
- 修改开头的
$dir1和$dir2为你的目标目录路径。 - 运行脚本,就能看到清晰的差异结果了。
举个例子,如果Test1比Test多了C:\Test1\NewFolder和C:\Test1\NewFile.txt,脚本会输出:
✅ 多余目录(仅Test1存在): C:\Test1\NewFolder ✅ 多余文件(仅Test1存在): C:\Test1\NewFile.txt
内容的提问来源于stack exchange,提问作者JBerto
相关产品推荐
相关产品推荐

