问题描述
我正在尝试搜索我所有的照片文件夹,并将任何具有特定尺寸的图像(1125x2436 - 即 iPhone 上的屏幕截图)移动到一个单独的文件夹中,我可以查看并很可能在之后删除该文件夹。
我从 Writing a script to copy images of certain dimensions 中获取了脚本,如下所示。这会复制图像,但是当我将其更改为 Move-Item
时,我收到“Move-Item:该进程无法访问该文件,因为它正被另一个进程使用。”我猜是因为它仍然被 ForEach-Object 循环中的 System.Drawing.Image 打开。
在删除或传递给变量以在循环外使用之前,我尝试调整它并关闭图像,但没有成功。
这就是我所拥有的
$source = Get-Location
$destination = "C:\Users\USER\Desktop\Output\"
$maxWidth = 1125
$maxHeight = 2436
# if the destination path does not exist,create it
if (!(Test-Path -Path $destination -PathType Container)) {
New-Item -Path $destination -ItemType Directory | Out-Null
}
# Add System.Drawing assembly
Add-Type -AssemblyName System.Drawing
Get-ChildItem -Path $source -File -Recurse | ForEach-Object {
# capture the full filename so we can use it in the catch block
$fileName = $_.FullName
# Open image file
try {
$img = [System.Drawing.Image]::FromFile($fileName)
# use '-ge' if you want to copy files with a width and/or height Greater Or Equal To the max dimensions
# use '-and' if you want to copy files where both the Width and the Height exceed the max dimensions
if ($img.Width -eq $maxWidth -and $img.Height -eq $maxHeight) {
$_ | Move-Item -Verbose -Destination $destination -Force
}
}
catch {
Write-Warning "Could not open file '$fileName' - Not an image file?"
}
}
我应该说我对 powershell 和发布 stackoverflow 很感兴趣,因此非常感谢任何建议。提前致谢。
解决方法
再深入挖掘后,就像在移动前添加 $img.dispose()
一样简单。
回答对其他人有用。