PowerShell批量处理文件属性:获取大小、修改日期及比较

10 次阅读

PowerShell凭借强大的文件系统操作能力,成为Windows环境下批量管理文件的重要工具。无论是服务器维护、数据整理,还是日常文件管理,都经常需要获取文件大小、创建时间、修改日期等属性,并对多个文件进行比较分析。通过PowerShell内置命令和对象化处理方式,可以快速完成传统图形界面难以实现的批量操作。

PowerShell获取文件基本属性

PowerShell处理文件时,通常使用Get-Item和Get-ChildItem命令。其中,Get-Item适用于获取单个文件信息,而Get-ChildItem更适合批量遍历目录中的文件。

获取单个文件属性示例:

PowerShell
$file = Get-Item "D:Dataexample.txt"

$file

执行后,可以看到文件名称、路径、大小、创建时间、修改时间等信息。

如果只需要查看指定属性,可以直接访问对象字段:

PowerShell
$file.Name
$file.Length
$file.CreationTime
$file.LastWriteTime

常用文件属性说明:

  • Name:文件名称

  • FullName:完整路径

  • Length:文件大小,单位为字节

  • CreationTime:创建时间

  • LastWriteTime:最后修改时间

  • LastAccessTime:最后访问时间

  • Extension:文件扩展名

例如查看文件大小:

PowerShell
$file.Length

返回结果可能是:

204800

表示文件大小为204800字节,即约200KB。

批量获取目录中文件信息

实际应用中,更多场景是处理整个文件夹中的文件。Get-ChildItem可以递归搜索目录,并结合属性筛选实现批量处理。

获取目录下所有文件:

PowerShell
Get-ChildItem "D:Data"

如果只查看文件,不包含子目录:

PowerShell
Get-ChildItem "D:Data" -File

递归获取所有子目录文件:

PowerShell
Get-ChildItem "D:Data" -File -Recurse

为了方便查看文件大小和修改时间,可以使用Select-Object格式化输出:

PowerShell
Get-ChildItem "D:Data" -File |
Select-Object Name, Length, LastWriteTime

输出效果类似:

Name          Length       LastWriteTime
----          ------       -------------
test.txt      10240        2026/10/3 10:20
data.csv      524288       2026/10/2 18:35

这种方式适合快速生成文件清单。

将文件大小转换为可读格式

文件大小默认以字节显示,当面对大量文件时可读性较差。可以通过计算转换为KB、MB或GB。

示例:

PowerShell
Get-ChildItem "D:Data" -File |
Select-Object Name,
@{Name="Size(MB)";Expression={[math]::Round($_.Length / 1MB,2)}},
LastWriteTime

输出:

Name        Size(MB)    LastWriteTime
----        --------    -------------
a.zip       125.50      2026/10/3 09:00
b.iso       2048.00     2026/10/1 15:30

其中:

  • 1KB等于1024字节

  • 1MB等于1024×1024字节

  • 1GB等于1024×1024×1024字节

PowerShell中的1MB、1GB属于内置单位转换,可以直接参与计算。

根据修改日期筛选文件

文件清理、备份和日志管理中,经常需要查找指定时间范围内修改过的文件。

例如查找最近7天修改过的文件:

PowerShell
$days = (Get-Date).AddDays(-7)

Get-ChildItem "D:Data" -File |
Where-Object {$_.LastWriteTime -gt $days}

查找超过30天未修改的文件:

PowerShell
$limit = (Get-Date).AddDays(-30)

Get-ChildItem "D:Data" -File |
Where-Object {$_.LastWriteTime -lt $limit}

这种方式可以快速定位长期未使用的数据,为磁盘清理提供依据。

批量比较两个文件夹中的文件

文件同步和备份过程中,经常需要比较两个目录中的文件差异。PowerShell可以通过文件名称、大小和修改时间进行判断。

例如比较两个目录:

PowerShell
$folder1 = Get-ChildItem "D:Source" -File
$folder2 = Get-ChildItem "D:Backup" -File

Compare-Object $folder1.Name $folder2.Name

该命令可以显示两个目录中文件名称的差异。

如果需要更精确地比较文件大小,可以创建哈希表:

PowerShell
$source = Get-ChildItem "D:Source" -File
$backup = Get-ChildItem "D:Backup" -File

foreach($file in $source){
    $target = $backup | Where-Object {$_.Name -eq $file.Name}

    if($target){
        if($file.Length -ne $target.Length){
            Write-Host "$($file.Name) 大小不同"
        }
    }
    else{
        Write-Host "$($file.Name) 不存在于备份目录"
    }
}

该脚本可以检测:

  • 文件是否存在

  • 文件大小是否一致

  • 文件是否发生变化

适合用于简单的数据同步检查。

使用哈希值比较文件内容

仅比较文件大小和修改时间并不能完全判断文件内容是否一致。例如文件内容被修改后保持相同大小,就无法通过Length发现变化。

此时可以使用Get-FileHash:

PowerShell
Get-FileHash "D:Dataexample.txt"

返回:

Algorithm       Hash
---------       ----
SHA256          8A3F......

比较两个文件:

PowerShell
$hash1 = Get-FileHash "D:Source.txt"
$hash2 = Get-FileHash "D:Backup.txt"

if($hash1.Hash -eq $hash2.Hash){
    Write-Host "文件内容一致"
}
else{
    Write-Host "文件内容不同"
}

哈希比较比属性比较更加准确,但对于大型文件需要消耗更多计算资源。

导出文件属性列表到CSV

批量管理文件时,经常需要生成报表。PowerShell可以直接导出CSV文件。

示例:

PowerShell
Get-ChildItem "D:Data" -File |
Select-Object Name,
FullName,
@{Name="Size(MB)";Expression={[math]::Round($_.Length / 1MB,2)}},
CreationTime,
LastWriteTime |
Export-Csv "D:ile_report.csv" -NoTypeInformation -Encoding UTF8

生成的CSV文件可以直接使用Excel打开,方便统计分析。

批量修改文件属性

除了读取文件属性,PowerShell也支持修改部分文件信息。

例如修改文件最后写入时间:

PowerShell
$file = Get-Item "D:Data	est.txt"

$file.LastWriteTime = "2026-10-01 12:00:00"

批量修改目录文件:

PowerShell
Get-ChildItem "D:Data" -File |
ForEach-Object {
    $_.LastWriteTime = Get-Date
}

执行后,所有文件修改时间会更新为当前时间。

需要注意,修改文件属性可能影响备份策略和版本管理,生产环境操作前应做好确认。

PowerShell处理文件属性的应用场景

利用PowerShell批量获取和比较文件属性,可以应用于多个实际场景:

1. 文件备份检查

通过比较文件大小、修改时间或哈希值,判断备份是否完整。

2. 磁盘空间分析

统计大文件:

PowerShell
Get-ChildItem "D:" -File -Recurse |
Sort-Object Length -Descending |
Select-Object -First 20 Name,Length

可以快速找到占用空间最大的文件。

3. 日志文件管理

根据修改时间筛选旧日志,并结合删除命令进行自动清理。

4. 文件同步验证

比较源目录和目标目录差异,确保数据迁移完整。

使用PowerShell批量处理文件属性的注意事项

在实际使用过程中,需要注意以下几点:

  1. 权限问题

部分系统目录需要管理员权限,否则可能无法读取文件属性。

  1. 隐藏文件处理

默认情况下,某些隐藏文件不会显示,可以添加:

PowerShell
-Hidden

参数获取隐藏文件。

  1. 大量文件性能

处理几十万个文件时,递归扫描可能耗时较长,可以缩小搜索范围或分批处理。

  1. 时间格式统一

不同系统环境可能存在日期格式差异,进行比较时建议使用标准日期对象,而不是字符串。

  1. 重要数据先测试

批量修改或删除操作执行前,应先使用测试目录验证脚本效果。

总结

PowerShell提供了一套完整的文件属性处理方案,通过Get-ChildItem、Select-Object、Where-Object以及Compare-Object等命令,可以轻松完成文件大小统计、修改日期筛选、目录比较和数据分析。

对于系统管理员、开发人员以及需要进行批量文件管理的用户来说,掌握PowerShell文件属性操作不仅能够提升工作效率,还能帮助构建自动化备份、清理和监控流程。结合文件哈希校验功能,还可以进一步提高文件比较的准确性,满足更加复杂的数据管理需求。