[玩转系统] 在 PowerShell 中比较两个文件夹的内容 [2 种方法]
作者:精品下载站 日期:2024-12-14 05:27:20 浏览:13 分类:玩电脑
在 PowerShell 中比较两个文件夹的内容 [2 种方法]
比较 PowerSHell 中两个文件夹的内容
PowerShell 是一个功能强大的工具,可以帮助系统管理员和 IT 专业人员自动执行日常任务,其中常见的任务之一就是比较两个文件夹的内容。这对于识别两个目录版本之间的差异或查找备份中丢失的文件非常有用。
要进一步进行,了解当前目录中的项目至关重要。例如,此演示的当前目录位于 C:\Test1 和 C:\Test2。
C:\Test1 包含两个文本文件和文件夹,名为
FolderA
和FolderB
。目录中的项目包括File1.txt
和File2.txt
。- C:\Test1\FolderA - 它包含一个文本文件 (
File4.txt
)。
- C:\Test1\FolderA - 它包含一个文本文件 (
- C:\Test1\FolderB - 它有一个文本文件(
File5.txt
和File7.txt
)。
C:\Test2 由两个名为 FolderC
和 FolderD
的文本文件和文件夹组成。该目录中的项目包括 File1.txt
和 File3.txt
。
- C:\Test2\FolderC - 它包含一个文本文件 (
File5.txt
)。
File6.txt
)。现在您已经了解了目录详细信息,让我们继续学习比较两个文件夹的内容。
使用 Compare-Object
Cmdlet
使用 compare-object
比较 PowerShell 中的两个文件夹。 compare-object
cmdlet 在 PowerShell 中比较两个数据集。
使用比较对象 Cmdlet:
$folder1 = "C:\Test1"
$folder2 = "C:\Test2"
$folder1Items = Get-ChildItem $folder1 -Recurse
$folder2Items = Get-ChildItem $folder2 -Recurse
Compare-Object -ReferenceObject $folder1Items -DifferenceObject $folder2Items -Property Name -IncludeEqual
输出 :
Name SideIndicator
---- -------------
File1.txt ==
File5.txt ==
FolderC =>
FolderD =>
File3.txt =>
File6.txt =>
FolderA <=
FolderB <=
File2.txt <=
File4.txt <=
File7.txt <=
在上面的代码中,我们定义了两个要比较的文件夹:$folder1
和 $folder2
。首先,$
符号在 PowerShell 中创建一个变量。然后,Compare-Object cmdlet 比较两个数据集。
ReferenceObject (Get-ChildItem $folder1)
指定引用对象和将用作比较基础的数据集。在本例中,我们使用 Get-ChildItem
cmdlet 来获取 $folder1
中的文件和目录列表,并以 -Recurse
作为参数并将该列表传递给 Compare-Object
cmdlet 的 -ReferenceObject
参数。这告诉 PowerShell 使用 $folder1
中的文件和目录作为比较的参考。
Compare-Object
cmdlet 的 -DifferenceObject
参数告诉 PowerShell 将 $folder2
中的文件和目录与 $folder1 中的文件和目录进行比较
。最后,-Property
指定我们要比较的对象的属性。在本例中,我们比较每个文件夹中文件和目录的 Name
属性。
-IncludeEqual
指定我们要在比较中包含两个文件夹中相同的对象。默认情况下,Compare-Object
cmdlet 仅返回引用对象和差异对象之间存在差异的对象。
此输出表明存在两个文件、三个不同的文件夹,并且两个文件夹之间有一个文件相同。输出中的 SideIndicator
列显示文件或文件夹的唯一侧, 表示右侧,和
==
两者。
考虑到上述解决方案,PowerShell 中的 Compare-Object
cmdlet 提供了一种有效且强大的方法来比较和识别两个数据集之间的差异。通过指定引用和差异对象、我们想要比较的属性以及任何其他选项(例如包括两个数据集中相同的对象),我们可以快速轻松地识别两个文件夹之间的更改。
使用 MD5 哈希
要比较两个文件夹的内容:
- 使用
Get-ChildItem
检索指定目录中的所有项目。 - 使用
Get-FileHash
生成每个文件的 MD5 哈希值。 - 使用两个
foreach
循环迭代两个目录的哈希值。 - 在每个循环的每次迭代中:
- 使用Where-Object 过滤匹配值,并在满足
if
语句时打印一条消息。
使用 MD5 哈希:
$folder1 = "C:\Test1"
$folder2 = "C:\Test2"
$hash1 = Get-ChildItem $folder1 -Recurse | Get-FileHash -Algorithm MD5
$hash2 = Get-ChildItem $folder2 -Recurse | Get-FileHash -Algorithm MD5
foreach ($hash in $hash1) {
$match = $hash2 | Where-Object { $_.Hash -eq $hash.Hash }
if ($match) {
Write-Host "File $($hash.Path) exists in both folders and is identical."
} else {
Write-Host "File $($hash.Path) exists only in $folder1."
}
}
foreach ($hash in $hash2) {
$match = $hash1 | Where-Object { $_.Hash -eq $hash.Hash }
if (!$match) {
Write-Host "File $($hash.Path) exists only in $folder2."
}
}
File C:\Test1\File1.txt exists in both folders and is identical.
File C:\Test1\File2.txt exists only in C:\Test1.
File C:\Test1\FolderA\File4.txt exists in both folders and is identical.
File C:\Test1\FolderB\File5.txt exists in both folders and is identical.
File C:\Test1\FolderB\File7.txt exists only in C:\Test1.
File C:\Test2\File3.txt exists only in C:\Test2.
File C:\Test2\FolderD\File6.txt exists only in C:\Test2.
MD5(消息摘要 5)是一种广泛使用的加密哈希函数,它可以从任意长度的消息生成固定长度的128 位
哈希值。如前所述,这是代码的逐步解释:
- 第一步是设置我们要比较的两个文件夹的路径。我们创建两个变量,
$folder1
和$folder2
,并为它们分配这两个文件夹的路径。 - 接下来,我们使用 Get-ChildItem cmdlet 检索两个目录中的所有文件,并将输出通过管道传输到 Get-FileHash cmdlet,后者为每个文件生成 MD5 哈希值。生成的哈希值存储在
$hash1
和$hash2
变量中。 - 然后,我们迭代
$hash1
中的每个哈希值并将其与$hash2
进行比较。我们使用“Where-Object”cmdlet 在$hash2
中搜索匹配的哈希值,如果找到匹配项,我们会向控制台输出一条消息,指示该文件存在于两个文件夹中,并且是相同的。如果未找到匹配项,我们将输出一条消息,指示该文件仅存在于$folder1
中。 - 然后,我们迭代
$hash2
中的每个哈希值,并检查仅存在于$folder2
中的文件。接下来,我们使用Where-Object
cmdlet 在$hash1
中搜索匹配的哈希值,如果未找到匹配项,我们会向控制台输出一条消息,表明该文件仅存在于$folder2
中。
考虑到上述解决方案,在 PowerShell 中比较两个文件夹的内容可以成为识别文件内容和结构差异的强大工具。添加 MD5 哈希可以提供更准确的文件比较。使用正确的脚本,即使在大型且复杂的目录结构上,也可以快速轻松地执行此任务。
这就是如何在 PowerShell 中比较两个文件夹的内容
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag