代码之家  ›  专栏  ›  技术社区  ›  Vijay Jagdale

PowerShell基于多个条件移动/重命名文件

  •  0
  • Vijay Jagdale  · 技术社区  · 3 年前

    我需要选择图像的大小,宽度和日期的基础上修改,移动它们,以及重命名它们。以下是我目前的剧本:

    Add-Type -Assembly System.Drawing
    Get-ChildItem -path C:\temp\images |
      Where-Object { $_.Length -ge 250Kb -and $_.lastwritetime -gt (get-date).addDays(-5) -and [Drawing.Image]::FromFile($_.FullName).Width -eq 1920 } | 
      move-item –PassThru | Rename-Item -NewName {-join @($_.Name,'.jpg')}
    

    问题是FromFile方法正在锁定文件并阻止移动,错误消息如下:

    移动项:进程无法访问该文件,因为它正在被删除 被另一个进程使用。

    1 回复  |  直到 3 年前
        1
  •  0
  •   Alicia    3 年前

    您需要使用该文件查找其他进程,例如:

    $lockedFile = "path/to/locked/file"
    $lockingProcessID = Get-Process | foreach {$processVar = $_;$_.Modules `
        | foreach {if($_.FileName -eq $lockedFile) {$processVar.id}}}
    

    然后终止进程:

    Stop-Process -ID $lockingProcessID -Force
    

    然后再次尝试移动文件。