Batch_ 比较两个类似名称的文件并多次删除较大的文件

Posted

技术标签:

【中文标题】Batch_ 比较两个类似名称的文件并多次删除较大的文件【英文标题】:Batch_ Compare two similarly named files and delete the larger, multiple times 【发布时间】:2013-02-28 16:40:51 【问题描述】:

我正在寻找一个漂亮的脚本,它可以在我提供多个文件时比较文件大小,然后删除较大的文件。

我有一组 JPG 和 PNG 格式的相同图像文件,我只想为每个单独的图像保留两者中较小的一个。每个图像的名称相似,例如 image-01.jpg 和 image-01.png 是成对的,image-02.jpg 和 image-02.png 是成对的,依此类推。有些图像仅以 PNG 形式存在(即 image-03.png 存在,但 image-03.jpg 不存在),不应删除这些图像或将其与“下一张图像”进行比较。

名称可能会有所不同,但一组通常是非常统一的。因为一次要比较数百个文件,如果我只需要提供两个和两个图像,那么手动比较它们会更快,这就是我目前所做的。

【问题讨论】:

文件是否都在同一个文件夹中? 是的,我表示我会拖放文件集进行比较。 你应该查看 JScript,它可以从 Windows 批处理文件中运行,命令如下:cscript //B scriptname.js js代码可以迭代// Create system objects var fs = WScript.CreateObject("Scripting.FileSystemObject"); var shell = WScript.CreateObject("WScript.Shell"); // Retrieve current directory var strDirectoryPath = addSlash(shell.CurrentDirectory); // Iterate on files var folder = fs.GetFolder(strDirectoryPath); var files = folder.Files; for( var it = new Enumerator(files); !it.atEnd(); it.moveNext() ) var file = it.item(); // get the extension var ext = fs.GetExtensionName(file.Name); if( whatever condition ) file.Delete(true); 这不是答案,只是指向正确方向的指针。祝你好运! 【参考方案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

【讨论】:

我希望在 bash (linux) 中做一些非常相似的事情,但我在一个文件夹中有许多具有相同基本名称的对。

以上是关于Batch_ 比较两个类似名称的文件并多次删除较大的文件的主要内容,如果未能解决你的问题,请参考以下文章

批处理 - 多次检查文件大小

删除名称以命令提示符开头的文件夹(批处理)

如何迭代Python列表并删除类似的元素?

Spring-batch - 比较来自 csv 的数据并相应地更新 Salesforce 中的记录

比较两个数据帧列并输出第三个

比较wav文件