繁体   English   中英

PowerShell Remove-Item不会静默删除单个文件

PowerShell Remove-Item silently doesn't remove a single file

提示:本站收集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中是完全菜鸟,而且我不知道有比这更好的地方了。

2 个回复

我认为您的$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调用之前设置一个断点,然后逐步执行代码。

2 Powershell无法使用remove-item删除某些文件

我创建了一个PS脚本,该脚本在文件服务器上的用户文件夹中搜索项目(电影,电视节目,exe文件等)。 我已经反复测试了该脚本,它找到并删除了我想要的所有文件,除了一些.avi文件。 我尝试过的一些文件名模式是: *.s0*e0*.mp4 *.s0*e0*.avi * ...

4 Remove-Item 不删除任何文件

我正在尝试从网络上的 80 多台服务器中删除一些文件。 代码运行良好,甚至说文件正在被删除,但是当我去检查服务器时......文件仍然存在。 我不太确定从这里去哪里。 ( 这是我的代码如下: 停止成绩单 ...

6 PowerShell-使用Remove-Item之前关闭文件

我正在研究一个脚本来检查2个.zip文件的内容,比较每个.zip中的文件名(作为日期时间),然后删除2个文件中最早的一个。 直到最后用简单的'Remove-Item'删除最旧的文件时,一切似乎都可以正常工作(我尝试了-Force选项,但没有任何改进)。 我的每次尝试都会导致此错误: ...

7 Remove-Item 在文件被删除之前返回?

在 PowerShell 中,我相信我观察到 PowerShell 试图在删除文件夹内容之前删除文件夹。 我使用的命令是Remove-Item 。 过去,将它与-recurse一起使用会偶尔出错,抱怨目录不是空的。 当我看到那个错误时,我去检查时会发现目标目录是空的。 我最好的猜测是它正在继续,而 ...

8 如果Remove-Item失败,请退出PowerShell

我有这样的命令 删除旧文件夹。 而且大部分时间都有效。 但有时这些文件夹包含隐藏文件和此作业日志。 “您没有足够的访问权限来执行此操作。” < - 这是有意的。 我不知道的是: 如果该命令无法删除至少一个项目,如何使整个作业失败(将错误代码设置为1并退出)。 ...

9 Powershell(PS2)记录Remove-Item

我是Powershell的新手,但到目前为止,我已经将一个脚本整合在一起,删除了比定义的创建日期更早的文件并排除了某些文件类型。 但是,我正在努力将verbose和文件日志输出结合起来。 我已经尝试了我在网上找到的各种方法,我认为Out-File是最合适的,但我根本无法使其工作。 希望有人 ...

10 将Remove-Item输出到日志文件

扫描目录以查找特定文件集并按日期对其进行排序。 无论日期如何,保留7个最新的文件副本,如果超过7,则删除最旧的副本。由于Remove-Item没有输出,我很难生成显示删除的日志文件。 下面是我的代码的副本: ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM