我有一个小脚本,它从 date1 小于 date2 的目录中删除文件。 但是,我的脚本正在运行,因为它在包含许多文件的目录上运行,我希望删除项一次只删除 100 个文件,以便我可以监视每次运行的进度。 这可能吗? ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我将PowerShell脚本混合在一起,该脚本以递归方式浏览文件夹以搜索分辨率过低的图片。
我已经搜索了几个小时的解决方案,到目前为止,我还没有设法删除这些图像。 那么这有什么用呢?
原来文件名中的方括号引起了问题。 但是现在,Remove-Item抱怨文件被另一个进程使用,我认为这是脚本本身。
$kuveja = 0
$pikkusii = 0
[void][reflection.assembly]::loadwithpartialname("system.drawing")
function Get-Image{
process {
$file = $_
[Drawing.Image]::FromFile($_.FullName) |
ForEach-Object{
$_ | Add-Member -PassThru NoteProperty FullName ('{0}' -f $file.FullName)
}
}
}
$path = 'H:\Juttui\'
Get-ChildItem $path\* -Include *.jpg, *.jpeg* -Recurse | ? {
$kuva = $_ | Get-Image
if($kuva.Width -lt 960 -and $kuva.Height -lt 960){
Write-Host $_.FullName -fore red
Remove-Item $_.FullName -Force
$pikkusii++
}
elseif($kuva.Width -lt 540 -or $kuva.Height -lt 540){
Write-Host $_.FullName -fore yellow
Remove-Item $_.FullName -Force
$pikkusii++
}
$kuveja++
}
Write-Host "Pics browsed: $kuveja" -fore green
Write-Host "Small: $pikkusii" -fore green
请了解,我在PowerShell中是完全菜鸟,而且我不知道有比这更好的地方了。
我认为您的$kuva
参考使文件保持打开状态。 在尝试删除该对象之前,请尝试执行.Dispose()
方法。 所以像这样:
Get-ChildItem $path\* -Include *.jpg, *.jpeg* -Recurse | ? {
$kuva = $_ | Get-Image
if($kuva.Width -lt 960 -and $kuva.Height -lt 960){
Write-Host $_.FullName -fore red
$kuva.dispose()
Remove-Item $_.FullName -Force
$pikkusii++
}
elseif($kuva.Width -lt 540 -or $kuva.Height -lt 540){
Write-Host $_.FullName -fore yellow
$kuva.dispose()
Remove-Item $_.FullName -Force
$pikkusii++
}
$kuveja++
}
Get-ChildItem $path\* -Include *.jpg, *.jpeg* -Recurse | ? {
# ...
}
?
表示Where-Object
,但我认为您真正想要的是ForEach-Object
。 ForEach-Object
的别名为%
,但是出于这个原因,您不应该在脚本中使用别名(不清楚)。
尝试这个:
Get-ChildItem $path\* -Include *.jpg, *.jpeg* -Recurse | ForEach-Object {
# ...
}
如果这不起作用,则在删除之前您有Write-Host
调用,因此您是否看到红色和黄色的文本指示应该进行删除? 您应该尝试在ISE中运行脚本。 在Remove-Item
调用之前设置一个断点,然后逐步执行代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.