1

我的任务是比较 2 个文件夹,FolderA 和 FolderB,并注意 A 中存在但 B 中不存在的任何文件。

很抱歉没有完全解释自己。如果我解释一下我们的情况,也许会有所帮助。公司销售人员离开我们公司去竞争对手那里。他的工作笔记本电脑本地硬盘上有文件。我们正在尝试确定他的计算机上是否存在任何文件,但共享网络文件夹中没有。

我需要生成他的笔记本电脑上存在但不在共享网络位置上的所有文件(及其路径)的列表。笔记本电脑本地硬盘和共享网络位置之间的文件结构不同。解决这个问题的最佳方法是什么?

$folderAcontent = "C:\temp\test1" 
$folderBcontent = "C:\temp\test2"

$FolderAContents = Get-ChildItem $folderAcontent -Recurse | where-object {!$_.PSIsContainer}
$FolderBContents = Get-ChildItem $folderBcontent -Recurse | where-object {!$_.PSIsContainer}

$FolderList = Compare-Object -ReferenceObject ($FolderAContents ) -DifferenceObject ($FolderBContents) -Property name
$FolderList | fl * 
4

3 回答 3

5

使用 compare-Object cmdlet:

Compare-Object (gci $folderAcontent) (gci $folderBcontent)

如果要列出仅在 $folderAcontent 中的文件,请使用 <= SideIndicator 选择结果:

Compare-Object (gci $folderAcontent) (gci $folderBcontent) | where {$_.SideIndicator -eq "<="}
于 2013-01-08T19:14:48.540 回答
2

假设两个目录中的文件名相同,您可以执行以下操作:-

$folderAcontent = "C:\temp\test1"  
$folderBcontent = "C:\temp\test2"

ForEach($File in Get-ChildItem -Recurse -LiteralPath $FolderA | where {$_.psIsContainer -eq $false} | Select-Object Name)
{
   if(!(Test-Path "$folderBcontent\$File"))
{
   write-host "Missing File: $folderBcontent\$File"
}
}

以上仅适用于文件夹 A 中的文件(而非子目录)

于 2013-01-08T18:26:51.017 回答
1

尝试:

#Set locations
$laptopfolder = "c:\test1"
$serverfolder = "c:\test2"

#Get contents
$laptopcontents = Get-ChildItem $laptopfolder -Recurse | where {!$_.PSIsContainer}
$servercontents = Get-ChildItem $serverfolder -Recurse | where {!$_.PSIsContainer}

#Compare on name and length and find changed files on laptop
$diff = Compare-Object $laptopcontents $servercontents -Property name, length -PassThru | where {$_.sideindicator -eq "<="}

#Output differences
$diff | Select-Object FullName

如果您lastwritetime在比较对象 cmdlet 中添加长度后,它也会比较修改日期(如果文件已更新但大小仍然相同)。请注意,它只查找不同的日期,而不是新旧日期。:)

于 2013-01-08T18:56:18.437 回答