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

如何在PowerShell的Compare-Object中返回路径但仅按Name比较?

解决方法

直接利用Compare-Object返回的对象保留原Get-ChildItem对象所有属性的特性,在比较后通过Select-Object提取完整路径即可,完全不影响基于文件名的比较逻辑:

  1. 先获取两个目标文件夹的文件列表:
$srcFiles = Get-ChildItem -Path "C:\Source\Folder"
$destFiles = Get-ChildItem -Path "C:\Destination\Folder"
  1. 按文件名Name比较,同时输出完整路径、文件名和差异标识:
Compare-Object -ReferenceObject $srcFiles -DifferenceObject $destFiles -Property Name |
    Select-Object `
        @{Name='完整路径'; Expression={$_.FullName}}, `
        Name, `
        SideIndicator

原理说明

Compare-Object指定-Property Name只是以文件名作为比较判定依据,但返回的结果对象依然保留了原文件对象的全部属性(比如FullName、Directory、Length等)。默认输出仅展示指定的Name和系统自带的SideIndicator,我们可以通过Select-Object主动提取FullName(即文件完整路径)来满足显示需求,不会因为两个文件夹路径不同导致误判。

进阶优化(精准同步)

如果你的同步工具需要更精准的判断(比如文件名相同但内容/修改时间不同的文件也需要同步),可以把额外属性加入比较条件:

Compare-Object -ReferenceObject $srcFiles -DifferenceObject $destFiles -Property Name, Length, LastWriteTime |
    Select-Object @{Name='完整路径'; Expression={$_.FullName}}, Name, Length, LastWriteTime, SideIndicator

递归处理子文件夹

如果需要同步嵌套子文件夹,给Get-ChildItem加上-Recurse参数即可:

$srcFiles = Get-ChildItem -Path "C:\Source\Folder" -Recurse
$destFiles = Get-ChildItem -Path "C:\Destination\Folder" -Recurse

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:48:21