2013-02-28 1 views
0

Я ищу отличный скрипт, который будет сравнивать размеры файлов при подаче нескольких файлов, а затем удалять больший файл.Batch_ Сравните два одинаково названных файла и удалите их больше, несколько раз

У меня есть набор идентичных файлов изображений в форматах JPG и PNG, и я хочу сохранить меньший из двух для каждого отдельного изображения. Каждое изображение аналогично названо, например, image-01.jpg и image-01.png являются парами, image-02.jpg и image-02.png являются парами и так далее. Некоторые изображения существуют только в виде PNG (т. Е. Image-03.png существует, но image-03.jpg нет), и их не следует удалять или сравнивать с «следующим изображением».

Имена могут отличаться, но набор обычно довольно однородный. Потому что есть сотни файлов для сравнения сразу, если мне пришлось подавать только два и два изображения, было бы быстрее просто сравнить их все вручную, что я и сейчас делаю.

+0

Все ли файлы находятся в одной папке? – TimH

+0

Да, я указал, что я бы перетащил набор файлов для сравнения. –

+0

Вы должны посмотреть в JScript, который можно запустить из командного файла Windows с помощью следующей команды: cscript // B scriptname.js – TimH

ответ

1

Я получил некоторую помощь и добавил строку к коду, который я опубликовал в более раннем комментарии. Я также немного отполировал код.

Следующий код работал для моей проблемы. Просто отбросьте файлы в код, и удалит самый большой файл, если два файла имеют равные имена. Обратите внимание, что файлы должны быть переданы в отсортированном порядке, чтобы он работал правильно. Я понятия не имею, как написать эффективный алгоритм сортировки для аргументов. Это вряд ли проблема получила мое использование, хотя, если кто-то хочет написать один для вызова, я был бы более чем счастлив увидеть его.

@echo off 

:BEGIN 
if "%~2" == "" goto END 
echo Comparing %~n1 and %~n2... 
if not "%~n1" == "%~n2" (echo Names don't match.) && goto NOMATCH 
echo Names match! Comparing filesize... 
if %~z1 gtr %~z2 (
    (echo *** Keeping %~2 ^(%~z2 bytes^) ***) 
    (echo *** Deleting %~1 ^(%~z1 bytes^) ***) 
    del "%~1". 
) else (
    (echo *** Keeping %~1 ^(%~z1 bytes^) ***) 
    (echo *** Deleting %~2 ^(%~z2 bytes^) ***) 
    del "%~2". 
) 
:NOMATCH 
echo. 
shift 
goto BEGIN 
:END 
pause 
+0

Я ищу что-то очень похожее в bash (linux), но у меня есть множество пар с одинаковым базовым именем в одной папке. –