PDA

Показать полную графическую версию : [решено] Удаление jpg по разрешению


foma24
01-12-2012, 20:47
добрый день. Подскажите пожалуйста, есть папка wallpepers в нем соответственно jpeg файлы с разным расширением, нужно удалить все файлы у которых разрешение ниже 1680 x 1050, возможно ли это сделать средствами bat файлов ?

Iska
02-12-2012, 06:15
foma24, напрямую — нет. Можете использовать WSH, например:
Option Explicit

Dim strPath2Wallpapers
Dim lngHRes
Dim lngVRes

Dim objFile
Dim objImageFile


strPath2Wallpapers = "C:\Wallpapers"
lngHRes = 1680
lngVRes = 1050

With WScript.CreateObject("Scripting.FileSystemObject")
If .FolderExists(strPath2Wallpapers) Then
Set objImageFile = WScript.CreateObject("WIA.ImageFile")

For Each objFile In .GetFolder(strPath2Wallpapers).Files
Select Case LCase(.GetExtensionName(objFile.Name))
Case "jpeg", "jpg", "jpe"
With objImageFile
.LoadFile objFile.Path

If .Width < lngHRes Or .Height < lngVRes Then
WScript.Echo CStr(.Width) & "x" & CStr(.Height), vbTab, objFile.Name
'objFile.Delete True
End If
End With
Case Else
' Nothing to do
End Select
Next

Set objImageFile = Nothing
Else
WScript.Echo "Folder [" & strPath2Wallpapers & "] not found"
End If
End With

WScript.Quit 0

NB! Для удаления раскомментируйте строку «'objFile.Delete True» (просто уберите апостроф «'»).
или PoSH.

foma24
02-12-2012, 12:42
Запустил, пишет

C:\111.vbs(23, 7) WIA.ImageFile.1: Параметр задан неверно.

Iska
02-12-2012, 12:53
foma24, значит, придётся дополнительно проверять, независимо от расширения, jpeg ли это. Попробуйте так:
Option Explicit

Dim strPath2Wallpapers
Dim lngHRes
Dim lngVRes

Dim objFile
Dim objImageFile


strPath2Wallpapers = "C:\Wallpapers"
lngHRes = 1680
lngVRes = 1050

With WScript.CreateObject("Scripting.FileSystemObject")
If .FolderExists(strPath2Wallpapers) Then
Set objImageFile = WScript.CreateObject("WIA.ImageFile")

For Each objFile In .GetFolder(strPath2Wallpapers).Files
Select Case LCase(.GetExtensionName(objFile.Name))
Case "jpeg", "jpg", "jpe"
With objImageFile
On Error Resume Next

.LoadFile objFile.Path

If Err.Number = 0 Then
On Error Goto 0

If .Width < lngHRes Or .Height < lngVRes Then
WScript.Echo CStr(.Width) & "x" & CStr(.Height), vbTab, objFile.Name
'objFile.Delete True
End If
Else
Err.Clear
On Error Goto 0

WScript.Echo "Can't load file [" & objFile.Name & "]"
End If
End With
Case Else
' Nothing to do
End Select
Next

Set objImageFile = Nothing
Else
WScript.Echo "Folder [" & strPath2Wallpapers & "] not found"
End If
End With

WScript.Quit 0

Для удаления раскомментируйте строку «'objFile.Delete True» (просто уберите апостроф «'»). »
— остаётся в силе.

kiripanda
02-12-2012, 13:53
@echo off &setlocal enableextensions

set "folder=X:"

set /a minW=1680 &set /a minH=1050
set Iv="D:\***\i_view32.exe"

pushd %folder%
for /f "delims=" %%i in ('dir /b *.jpg *.jpeg') do (
title %%i
%Iv% "%%i" /info="%temp%\info.tmp"
for /f "tokens=3,4 delims==x " %%a in (
'findstr /c:"Image dimensions = " "%temp%\info.tmp"'
) do (set /a W=%%a &set /a H=%%b)
call %ComSpec% /c if %%W%%. LSS %minW%. echo del /q "%%i"
call %ComSpec% /c if %%H%%. LSS %minH%. echo del /q "%%i"
)
del /q "%temp%\info.tmp"
popd

foma24
02-12-2012, 15:15
Всем спасибо, скрипт прекрасно работает. Небольшой вопрос, а возможно было сделать тоже самое на powershell и как бы выглядел скрипт ?




© OSzone.net 2001-2012