2016-05-23 24 views
0

特定のフォルダからすべての縦横の画像を削除したいと思います。PowerShellを使用して寸法に基づいて画像を削除する

私は縦の写真や画像が600×600ピクセル未満のサイズの写真は欲しくないと思っています。 PowerShellは私のコンピュータ上でPythonを動作させることができないので、使用するのに最適なものだと私は信じています。

私は毎日自分のフォルダから垂直/小さい画像を手動で削除したくないので、これをやります。 (毎日新しいものを入手します)

どんな助力があれば幸いです!ここで

が私のコードです:

cd C:\Users\Jack\Desktop\Test 

$c = 5 
Function Get-FileMetaData { 

    Param([string[]]$folder) 
    foreach($sFolder in $folder) { 
     $a = 0 
     $b = 1 

     $objShell = New-Object -ComObject Shell.Application 
     $objFolder = $objShell.namespace($sFolder) 

     foreach ($File in $objFolder.items()) { 

      $FileMetaData = New-Object PSOBJECT 
      for ($a ; $a -le 266; $a++) { 
       if($objFolder.getDetailsOf($File, $a)) { 

        $hash += @{$($objFolder.getDetailsOf($objFolder.items, $a)) = 
        $($objFolder.getDetailsOf($File, $a)) } 
        $FileMetaData | Add-Member $hash 

        if ($($objFolder.getDetailsOf($objFolder.items, $a)) -eq "Height") { 
         Write-Host $($objFolder.getDetailsOf($objFolder.items, $a)) ===== 
         $($objFolder.getDetailsOf($File, $a)) 
        } 

        if ($($objFolder.getDetailsOf($objFolder.items, $a)) -eq "Width") { 
         Write-Host $($objFolder.getDetailsOf($objFolder.items, $a)) ===== 
         $($objFolder.getDetailsOf($File, $a)) 
        } 

        if ($($objFolder.getDetailsOf($objFolder.items, $a)) -eq "Name") { 
         Write-Host $($objFolder.getDetailsOf($objFolder.items, $a)) ===== 
         $($objFolder.getDetailsOf($File, $a)) 
        } 

        $b++ 
        $hash.clear() 

       } #end if 
      } #end for 
     Write-Host $a 
     $a=0 
     $FileMetaData 
     } #end foreach $file 
    $c++ 
    Write-Host c = $c 
    } #end foreach $sfolder 
} #end Get-FileMetaData 

Write-Host c = $c 

$h = Get-FileMetaData C:\Users\Jack\Desktop\Test | select Height 
$w = Get-FileMetaData C:\Users\Jack\Desktop\Test | select Width 
$n = Get-FileMetaData C:\Users\Jack\Desktop\Test | select Name 

$h 
Write-Host w = $w 
Write-Host name = $n 

$SpecChars = '!', "{", "}", '"', '£', '$', '%', '&', '^', '*', '(', ')', '@', '=', '+', '¬', '`', '\', '<', '>', '?', '/', ':', ';', '#', '~', "'", '-', "Name", "N", "a", "m", "e", ' ' 
$remspecchars = [string]::join('|', ($SpecChars | % {[regex]::escape($_)})) 


if (($h) -replace '\D+(\d+)','$1' -gt ($w) -replace '\D+(\d+)','$1') { 

     Write-Host "VERTICAL" 

     Write-Host name = $n 

     $d = $n -replace $remspecchars, "" 
     $d.split() 
     Write-Host $d 
     $tally = 0 
     while($tally -ne $d.Count) { 
      del $d[$tally] 
      $tally++ 
     } 


     $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") 
    } 

Write-Host "Finished" 
+0

を試してみてくださいあなたがこれを読んで、あなたの質問を改善しようとすることを確認してください:ここではhttp://stackoverflow.com/help/mcve –

+0

私のコードですhttps://drive.google.com/open?id=0B15ToJa5Sa4cdWlXMllwcDlza0E – Jacksmackod

+0

あなたの質問に必要なすべての重要な情報を質問に含めてください。外部リソースが(何らかの理由で)消えれば、あなたの質問は他の人にとって役に立たなくなります。 –

答えて

1

この

$folder = 'C:\temp\Pictures\' 

$image = New-Object -ComObject Wia.ImageFile 

$pictures = Get-ChildItem $folder *.jpg | ForEach-Object { 
    $image.LoadFile($_.fullname) 
    $size = $image.Width.ToString() + 'x' + $image.Height.ToString() 

    $orientation = $image.Properties | ? {$_.name -eq 'Orientation'} | % {$_.value} 
    if ($orientation -eq 6) { 
     $rotated = $true 
    } else { 
     $rotated = $false 
    } 

    $heightGtWidth = if ([int]$image.Height.ToString() -gt [int]$image.Width.ToString()) { 
     $true 
    } else { 
     $false 
    } 

    [pscustomobject]@{ 
     Fullname = $_.FullName 
     Size = $size 
     Rotated = $rotated 
     HeightGtWidth = $heightGtWidth 
    } 
} 

$pictures 
+0

これは、あなたが何をやったのか、理由を説明してくれれば、尋問者や他の読者が理解しやすくなるでしょう。 – briantist

+0

申し訳ありませんが、私が探しているのは、垂直か600×600ピクセル以下の画像を削除することです – Jacksmackod

+0

ありがとうございました!私はちょっと微調整しなければなりませんでしたが、あなたはほとんどの仕事をしました。 – Jacksmackod

関連する問題