如何用PowerShell批量修改多目录文件的创建时间等属性
针对你在SharePoint迁移中遇到的「The item created time or modified time is not supported」错误,以及原脚本只能单目录处理的问题,以下是两种优化后的PowerShell脚本方案,无需逐个切换目录即可批量处理多个文件夹:
方案1:通过命令行参数传入目标路径
可以直接在运行脚本时传入一个或多个文件夹路径,脚本会逐个处理:
param( [Parameter(Mandatory=$true)] [string[]]$TargetPaths ) foreach ($path in $TargetPaths) { # 验证路径是否存在 if (-not (Test-Path -Path $path)) { Write-Warning "路径 $path 不存在,跳过处理" continue } # 输出当前目录的文件时间属性(可选,用于验证) Write-Host "`n正在处理目录:$path" Get-ChildItem -Path $path -Force | Select-Object Mode, Name, CreationTime, LastAccessTime, LastWriteTime | Format-Table # 获取目录下所有非文件夹的文件 $modifyfiles = Get-ChildItem -Path $path -Force | Where-Object {!$_.PSIsContainer} foreach ($object in $modifyfiles) { $object.CreationTime = "2023/01/03 12:00:00" $object.LastAccessTime = "2023/01/03 12:01:00" $object.LastWriteTime = "2023/01/03 12:02:00" Write-Host "已修改文件:$($object.FullName)" } }
使用方式:
将脚本保存为ModifyFileTimes.ps1,然后在PowerShell中运行:
.\ModifyFileTimes.ps1 -TargetPaths "C:\Folder1", "D:\Shared\Folder2", "E:\Archive\Folder3"
方案2:预先定义目录列表
如果目标路径固定,可以直接在脚本中定义路径数组,运行脚本即可自动批量处理:
# 定义需要处理的文件夹路径数组 $targetDirectories = @( "C:\Folder1", "D:\Shared\Folder2", "E:\Archive\Folder3" ) foreach ($path in $targetDirectories) { # 验证路径是否存在 if (-not (Test-Path -Path $path)) { Write-Warning "路径 $path 不存在,跳过处理" continue } Write-Host "`n正在处理目录:$path" Get-ChildItem -Path $path -Force | Select-Object Mode, Name, CreationTime, LastAccessTime, LastWriteTime | Format-Table $modifyfiles = Get-ChildItem -Path $path -Force | Where-Object {!$_.PSIsContainer} foreach ($object in $modifyfiles) { $object.CreationTime = "2023/01/03 12:00:00" $object.LastAccessTime = "2023/01/03 12:01:00" $object.LastWriteTime = "2023/01/03 12:02:00" Write-Host "已修改文件:$($object.FullName)" } }
关键优化点说明:
- 移除了
cd命令,通过Get-ChildItem的-Path参数直接指定目标目录,避免目录切换操作 - 添加了路径存在性验证,防止因无效路径导致脚本报错
- 增加了处理过程的提示信息,方便跟踪进度
- 支持批量处理多个目录,无需重复修改脚本或手动切换目录
内容的提问来源于stack exchange,提问作者IT GUY
相关产品推荐
相关产品推荐

