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

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

1 ответ1

2

Лучший способ добиться этого - использовать 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). Затем запустите его (из проводника или из командной строки (с папкой изображения в качестве параметра)). Надеюсь, это то, что вы искали / код достаточно прост для понимания. Если вам нужна дополнительная помощь, лучше всего добавить комментарий к вашему вопросу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .