Удаление нескольких файлов изображений с определенными критериями

405

Я ищу простой способ удаления изображений в папке «Обои» размером менее 1080x1920. Я думал, что может быть какой-то сценарий / команда, которая может сделать это. Однажды я столкнулся с функцией сценариев в самой Windows, но на самом деле я не очень-то ее понимал.

Любая помощь будет оценена!

0
Вы можете использовать exiftool с открытым исходным кодом для извлечения измерений: exiftool -ImageSize ImageFilePath. Затем результат может быть проанализирован в горизонтальном и вертикальном измерениях, которые можно сравнить с критериями удаления. AFH 6 лет назад 0
Обратите внимание, что https://superuser.com не является бесплатным сервисом для написания скриптов / кодов. Если вы сообщите нам, что вы уже пробовали (включая скрипты / код, который вы уже используете) и где вы застряли, мы можем попытаться помочь с конкретными проблемами. Вам также следует прочитать [Как мне задать хороший вопрос?] (Https://superuser.com/help/how-to-ask). DavidPostill 6 лет назад 0
Вы даже не предоставляете свою операционную систему и не пытаетесь написать скрипт самостоятельно. DavidPostill 6 лет назад 0

1 ответ на вопрос

2
Nironda

Лучший способ добиться этого - использовать exiftool . Загрузите его (обязательно возьмите исполняемый файл Windows, а не файл Linux, указанный вначале). Откройте редактор, вставьте следующий код и сохраните его как «deletesmallwp.bat» (или измените значение «filename» соответственно)

@echo off REM SETLOCAL EnableDelayedExpansion  REM Writes all img filenames smaller 1920/1080px for either a given parameter or a predefined folder into a txt file, then reads it and deletes all files written in there. REM Without -r, not recursive, so without sub-folders. REM "exifpath" needs to be changed to the path of the exiftool and "picpath" to the path of the pictures to be checked and deleted. REM No need to run as admin, as long as you have the proper file permissions to delete (change)  ECHO Parameter: %1   REM Paths can be either absolute or relative to the folder of this batch file. See f.e. exifpath  REM In this ex. the batch is saved in "Pictures" and the pics to delete are in "Pictures\Wallpapers" set exifpath=C:\Users\User\Pictures\exif\exiftool.exe set exifpath=exif\exiftool.exe set picpath=Wallpapers set exportfile=smallwp.txt set filename=deletesmallwp  REM Check from where file was run and set working directory if needed. set batchpath=%0 set res= IF %batchpath% == %filename% set res=1 IF "%batchpath%" == "%filename%.bat" set res=1 IF NOT DEFINED res ( cd /D %~dp0 )  REM Check if file exists, else skip to the end IF NOT EXIST %exifpath% GOTO NOPORT  REM Some info IF [%1] EQU [] ( ECHO UNDEFINED)  ECHO. IF NOT DEFINED res ECHO INFO: Changed working directory ECHO.  REM Check if a parameter is given, then run exiftool to create a list with images IF [%1] EQU [] ( ECHO -Direct: '%picpath%' %exifpath% -if "$imagesize and ($imagewidth<1920 or $imageheight<1080)" -filename -T -L %picpath% >%exportfile% ) ELSE ( ECHO -Parameter 'see above' %exifpath% -if "$imagesize and ($imagewidth<1920 or $imageheight<1080)" -filename -T -L %1 >%exportfile% ) ECHO. ECHO If you don't want certain files to be deleted, now might be a good time to look into %exportfile%. ECHO. pause ECHO. REM REM Delete every file found in the file and print the success for /F "tokens=*" %%A in (%exportfile%) do del "%picpath%\%%A" 2>&1 >nul|findstr "^" >nul && echo FAILURE with %%A || echo DELETED ECHO. goto :ENDE  :NOPORT echo "Portable ExifTool missing" goto :ENDE   :ENDE pause 

Измените установленные значения в соответствии с первой строкой комментария (REM). Затем запустите его (из проводника или из командной строки (с папкой изображения в качестве параметра)). Надеюсь, это то, что вы искали / код достаточно прост для понимания. Если вам нужна дополнительная помощь, лучше всего добавить комментарий к вашему вопросу.

Мне было интересно - так как мы говорим об обоях - что происходит, когда пользователь имеет монитор с возможностью поворота (и использует его). К сожалению, по умолчанию окна просто растягивают изображение. Но с UltraMon & Co это меняется, так что вы можете захотеть вот так (не проверено) `(($ imagewidth <1920 и $ imageheight <1080) или ($ imagewidth <1080 и $ imageheight <1920))` Nironda 6 лет назад 0

Похожие вопросы