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
相关产品推荐
相关产品推荐

