[玩转系统] PowerShell 比较两个文件的 LastWriteTime [4 种方法]
作者:精品下载站 日期:2024-12-14 20:33:49 浏览:14 分类:玩电脑
PowerShell 比较两个文件的 LastWriteTime [4 种方法]
使用 LastWriteTime 属性
要在 PowerShell 中比较两个文件的 LastWriteTime
:
- 使用
Get-Item
获取项目。 - 使用
if-else
块比较两个文件的LastWriteTime
。
使用 -eq 运算符:
$fileName1 = Get-Item "E:\Test\file1.txt"
$fileName2 = Get-Item "E:\Test\file2.txt"
if ($fileName1.LastWriteTime -eq $fileName2.LastWriteTime) {
Write-Host "The LastWriteTime of the '$($fileName1.Name)' and '$($fileName2.Name)' is same."
}
elseif ($fileName1.LastWriteTime -gt $fileName2.LastWriteTime) {
Write-Host "The LastWriteTime of the '$($fileName1.Name)' is greater than '$($fileName2.Name)'"
}
else{
Write-Host "The LastWriteTime of the '$($fileName1.Name)' is greater lesser '$($fileName2.Name)'"
}
输出 :
The LastWriteTime of the 'file1.txt' is greater than 'file2.txt'
使用 Compare-Object
Cmdlet
要在 PowerShell 中比较两个文件的 LastWriteTime
:
- 使用
Get-Item
获取项目。 - 使用
Compare-Object
cmdlet 比较 PowerShell 中两个文件的LastWriteTime
。 - 使用
if-else
块确定两个文件的LastWriteTime
是否相同。
使用比较对象 Cmdlet:
$fileName1 = Get-Item "E:\Test\file1.txt"
$fileName2 = Get-Item "E:\Test\file2.txt"
$fileComparison = Compare-Object -ReferenceObject $fileName1.LastWriteTime -DifferenceObject $fileName2.LastWriteTime
if ($fileComparison -eq $null) {
Write-Host "The LastWriteTime of the '$($fileName1.Name)' and '$($fileName2.Name)' is same."
} else {
Write-Host "The LastWriteTime of the '$($fileName1.Name)' and '$($fileName2.Name)' is different."
}
输出 :
The LastWriteTime of the 'file1.txt' and 'file2.txt' is different.
首先,我们使用 Get-Item
cmdlet 获取给定位置的项目并将其存储在 $fileName1
和 $fileName2
变量中。此 cmdlet 仅用于从指定位置获取项目,而不是其内容,除非我们使用通配符 (*
) 来请求项目的整个内容。请注意,PowerShell 提供程序使用此 cmdlet 来遍历各种数据存储。
然后,我们使用 Compare-Object cmdlet 比较 $fileName1
和 $fileName2
的 LastWriteTime
,并将其保存在 $fileComparison 中变量。此 cmdlet 用于比较 PowerShell 中的两组对象。这里,第一组对象是ReferenceObject,而第二组对象是DifferenceObject。在我们的例子中,
$fileName1.LastWriteTime
是参考
,$fileName2.LastWriteTime
是差异
。
Compare-Object
查看可用于比较整个对象的可用方法;如果找不到任何合适的方法,则使用 ToString()
来比较字符串结果。使用此 cmdlet 时,我们可以提供一个或多个可用于执行比较的属性。
指定属性后,Compare-Object
cmdlet 仅比较这些属性的值。
比较的结果表示指定属性是否仅出现在 DifferenceObject
(=>
) 中或 ReferenceObject
($lastWriteTimeDifference
对象等于 0
。如果是,则执行 if
块;否则,elseif
块将检查 $lastWriteTimeDifference
对象的 TotalSeconds
属性的值是否大于 0
;否则会执行else。
假设我们在特定位置有 n
个文件,我们想要将一个文件的 LastWriteTime
与其余文件进行比较。然后,我们可以使用以下方法来满足项目需求。
使用 Get-ItemProperty
Cmdlet
要在 PowerShell 中比较两个文件的 LastWriteTime
:
- 使用
Get-ChildItem
cmdlet 从给定位置获取项目/子项目。 - 使用Where-Object cmdlet 筛选从
Get-ChildItem
cmdlet 接收的对象。 - 将第一个文件对象及其
LastWriteTime
保存在两个单独的变量中。 - 使用
foreach
循环迭代所有过滤的对象。 -
在每次迭代中:
- 使用
Get-ItemProperty
cmdlet 获取指定项目的lastwritetime
属性。
- 使用
- 使用带有
-gt
和-lt
比较运算符的if-else
块来比较LastWriteTime
。 - 使用
Write-Output
cmdlet 可以打印第一个文件的上次写入时间是否与当前文件相同、早于或晚于当前文件。
使用 Get-ItemProperty Cmdlet:
$source = "E:\Test"
$allFiles =Get-ChildItem $source | Where-Object { !$_.PSIsContainer }
$firstFile = $allFiles[0]
$firstFileLastWriteTime = [datetime](Get-ItemProperty -Path $firstFile.FullName -Name LastWriteTime).LastWriteTime
foreach ($file in $allFiles) {
$dateTime = [datetime](Get-ItemProperty -Path $file.FullName -Name LastWriteTime).lastwritetime
if ($dateTime -gt $firstFileLastWriteTime) {
Write-Output "$($file.Name) - Last Write Time is newer than $($firstFile.Name)"
} elseif ($dateTime -lt $firstFileLastWriteTime) {
Write-Output "$($file.Name) - Last Write Time is older than $($firstFile.Name)"
} else {
Write-Output "$($file.Name) - Last Write Time is the same as $($firstFile.Name)"
}
}
输出 :
computersList.txt - Last Write Time is the same as computersList.txt
file - Copy.doc - Last Write Time is older than computersList.txt
file - Copy.pdf - Last Write Time is newer than computersList.txt
file.docx - Last Write Time is older than computersList.txt
file.pdf - Last Write Time is newer than computersList.txt
file2.txt - Last Write Time is older than computersList.txt
file3.txt - Last Write Time is older than computersList.txt
file4.txt - Last Write Time is older than computersList.txt
testPS.ps1 - Last Write Time is newer than computersList.txt
首先,我们使用源位置的路径定义并初始化一个名为 $source
的变量,在本例中为 E:\Test。接下来,我们使用 Get-ChildItem cmdlet 检索指定位置(上例中为 $source
)中的项目。请记住,Get-ChildItem
可以从给定目录和子目录获取项目和子项目,并将它们作为 System.IO.FileInfo
和 System.IO 返回。 DirectoryInfo
对象。
由于我们只对文件感兴趣,不想深入目录或子目录,因此我们使用 Where-Object
cmdlet 来过滤和选择那些不是容器(目录)的对象。如何?让我们来理解一下。在 { !$_.PSIsContainer }
表达式中,{}
表示脚本块,$_
表示管道中的当前对象,并且 !
用于否定 PSIsContainer
属性的值。这意味着 Where-Object
将过滤所有容器并仅选择那些不是容器的对象。然后,我们将结果值存储在 $allFiles
变量中。
之后,我们使用 $allFiles[0]
检索第一个文件并将其存储在 $firstFile
变量中。我们还将 $firstFile
的 LastWriteTime
存储在 $firstFileLastWriteTime
变量中。
接下来,我们使用 foreach
循环来迭代 $allFiles
。在每次迭代中,我们都使用 Get-ItemProperty cmdlet 来获取当前项目的属性;在上面的代码中,我们获取了 lastwritetime
属性,使用 [datetime]
将其类型转换为 DATETIME
并将其存储在 $中日期时间变量。之后,我们使用
if-else
块以及 -gt
和 -lt
运算符来比较 LastWriteTime
$firstFile
与当前项目的上次写入时间并检查它是否比第一个文件的上次写入时间更旧、相同或更新。
在每个条件块中,我们使用 Write-Output
cmdlet 来打印当前项目的名称(文件名),并描述上次写入时间是否与 computersList.txt 相同、更旧或更新。
这是我们的第一个文件。如果您想要所有文件的Mode
、LastWriteTime
、Length
和Name
,我们可以使用以下解决方案在指定位置。
使用 ls 命令
使用ls
命令列出指定位置中LastWriteTime
大于一天的多个文件的LastWriteTime
。
使用 ls 命令:
ls | where-object {(new-timespan $_.LastWriteTime).days -ge 1}
输出 :
Directory: E:\Test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2/8/2023 9:26 PM 196 file1.txt
-a---- 2/8/2023 9:31 PM 83 file2.txt
-a---- 2/18/2023 12:18 PM 82 file3.txt
我们已经学习了本示例中使用的所有命令。您可能会将 ls
视为新命令,但这是上一节中已解释的 Get-ChildItem
cmdlet 的别名。 ls
检索当前目录中使用管道 (|
) 转发到 Where-Object
cmdlet 的所有文件和子目录,其中 Where-Object
根据 LastWriteTime
属性过滤它们。
我们已经了解到 New-TimeSpan
cmdlet 创建一个 TimeSpan
对象;此处,其 Days
属性表示时间跨度内的整天数。 Where-Object
cmdlet 前面的表达式确定 TimeSpan
对象的 Days
属性是否大于或等于 1
,这意味着当前项目最后一次写入是在一天多之前。如果此表达式为 True
,则当前项目将添加到输出中。
如果您只对获取Day
、Date
和Time
感兴趣,我们可以使用ls
,如下所示。
使用 ls 命令:
$source = "E:\Test"
(ls $source).LastWriteTime
输出 :
Wednesday, February 8, 2023 9:26:59 PM
Wednesday, February 8, 2023 9:31:21 PM
Saturday, February 18, 2023 12:18:35 PM
我们可以根据我们的项目需求对上述所有示例进行不同的比较,例如 -gt
(大于)、lt
(小于)、-ge
(大于或等于)或-le
(小于或等于)。
这就是 powerShell 比较两个文件的 LastWriteTime 的全部内容。
猜你还喜欢
- 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