You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell:获取格式化文件创建日期,批量移动图片至对应日期文件夹

解决PowerShell图片按创建日期分类移动的问题

让我帮你修复这个脚本的问题,顺便完成你想要的文件移动功能:

先说说你遇到的错误原因

你的报错是因为这行代码完全用错了:

$CreationDateStr = Get-ChildItem $files[$i].CreationTime | Get-Date -f "yyyy-MM-dd"

Get-ChildItem是用来读取文件系统内容的命令,你把一个DateTime对象($files[$i].CreationTime)传给它,它会把这个日期字符串当成磁盘路径去解析,自然会报找不到磁盘的错误——这完全是多余的操作,文件对象本身已经包含了创建时间,直接格式化就行!

修正后的完整脚本

下面是可以直接运行的代码,我还加入了文件夹自动创建和文件移动的逻辑:

# 获取目标目录下的所有文件(如果只想处理图片,可加过滤条件)
$photoDir = "P:\photos\"
$files = Get-ChildItem $photoDir -File # -File参数确保只获取文件,排除子文件夹

# 用foreach遍历更简洁(比for循环更符合PowerShell习惯)
foreach ($file in $files) {
    # 直接格式化文件的创建时间为"yyyy-MM-dd"格式
    $creationDateStr = Get-Date $file.CreationTime -Format "yyyy-MM-dd"
    # 另一种写法:$creationDateStr = $file.CreationTime.ToString("yyyy-MM-dd")

    Write-Host "正在处理: $($file.Name)"
    Write-Host "创建日期: $creationDateStr"

    # 构建目标文件夹路径
    $targetFolder = Join-Path $photoDir $creationDateStr

    # 如果文件夹不存在,自动创建(-Force参数避免重复创建时报错)
    if (-not (Test-Path $targetFolder)) {
        New-Item -ItemType Directory -Path $targetFolder -Force | Out-Null
        Write-Host "已创建文件夹: $targetFolder"
    }

    # 移动文件到目标文件夹
    Move-Item -Path $file.FullName -Destination $targetFolder -Force
    Write-Host "文件已移动完成`n"
}

Read-Host -Prompt "Press Enter to exit"

额外优化建议

  • 如果只想处理特定格式的图片(比如JPG、PNG),可以修改Get-ChildItem这一行:
    $files = Get-ChildItem $photoDir -File -Include *.jpg,*.png,*.gif
    
  • 用Join-Path拼接路径比手动写字符串更安全,能避免路径分隔符的问题
  • foreach ($file in $files)比传统的for循环更易读,也是PowerShell中遍历集合的推荐方式

内容的提问来源于stack exchange,提问作者Matthias Pospiech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:56:01