0

複数のファイルをフィードしたときにファイルサイズを比較し、大きなファイルを削除する気の利いたスクリプトを探しています。

JPG 形式と PNG 形式の同一の画像ファイルのセットがあり、個々の画像ごとに 2 つのうち小さい方のみを保持したいと考えています。image-01.jpg と image-01.png はペア、image-02.jpg と image-02.png はペア、というように、各画像にも同様の名前が付けられます。一部の画像は PNG としてのみ存在し (つまり、image-03.png は存在するが、image-03.jpg は存在しない)、これらを削除したり、「次の画像」と比較したりしないでください。

名前は異なる場合がありますが、セットは通常非常に均一です。一度に比較するファイルは数百あるため、2 つまたは 2 つの画像だけをフィードする必要がある場合は、それらすべてを手動で比較する方が高速です。これが現在私が行っている方法です。

4

1 に答える 1

1

助けを得て、以前のコメントで投稿したコードに行を追加しました。コードも少し磨きました。

次のコードは私の問題に対して機能しました。ファイルをコードにドロップするだけで、2 つのファイルの名前が同じ場合、最大のファイルが削除されます。ファイルが正しく機能するためには、ファイルがソートされた順序で渡される必要があることに注意してください。引数の効率的な並べ替えアルゴリズムを作成する方法がわかりません。これは私が利用できる問題ではありませんが、誰かが挑戦のために書きたいと思っているなら、私はそれを見てうれしいです.

@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
于 2013-03-01T00:41:15.557 に答える