删除目录中的重复文件

时间:2018-06-06 14:56:27

标签: batch-file

我有一个工作脚本(下面),它仅按大小比较文件,如果一个或多个文件大小不同,则显示在Full code here上。

3

但我需要更多!

我还需要脚本删除重复文件,只保留一个。例如,如果有2个文件大小相同但名称不同,则脚本应选择一个保留,删除另一个<input type="text" id="barcode" name="barcode"/> $(function() { $("#barcode").on("change", function (e) { // get the current value var barcode = $('#barcode').val(); // if there's no text, ignore the event if (!barcode) { return; } // clear the textbox $("#barcode").val(""); // post the data using AJAX $.post('@Url.Action("scanned", "receiveScan")?barcode=' + barcode); });

@LotPings,我尝试了2 .pdf文件,并在下面的图片中显示此消息:

.bat screen

@LotPings

现在它认可了!但它不会删除副本,只是识别....看下面的图像:

Error

2 个答案:

答案 0 :(得分:0)

  • 我认为处理相同内容大小相同的文件有点天真 如果有疑问,最好将二进制文件与fc进行比较。
  • %%~Fa填充到字符串中而不引用可能包含空格的每个名称的方法在进一步处理时可能会出现问题。
  • 如果文件 相同,则可以创建链接。
  • 知道 for /r会递归到子目录中吗?

以下批处理将以不同的方式处理size[]数组,将大小和内容传递给子程序,该子程序保留第一个文件和(只有echos)del命令。

:: Q:\Test\2018\06\06\SO_50723488.cmd
@echo off & setlocal
rem Group all file names by size
for /R %%a in (*.*) do call set size[%%~Za]=%%size[%%~Za]%%,"%%~Fa"

rem Process groups
for /F "tokens=2* delims=[]=," %%a in ('set size[') do Call :Sub %%a %%b

pause
Goto :Eof

:Sub
If "%~3"=="" (Set "size[%1]="&goto :EOf)
Echo ========================================
Echo processing %*
Echo Keep %2
Shift&shift

:loop
Echo Del  %1
if not "%~2"=="" (shift&goto :loop)

示例输出:

> Q:\Test\2018\06\06\SO_50723488.cmd
========================================
processing 0 "Q:\Test\2018\05\03\Text3.txt","Q:\Test\2018\05\27\log.html"
Keep "Q:\Test\2018\05\03\Text3.txt"
Del  "Q:\Test\2018\05\27\log.html"
========================================
processing 14 "Q:\Test\2018\05\03\Text1.txt","Q:\Test\2018\05\15\HP-G1610-20180515.json"
Keep "Q:\Test\2018\05\03\Text1.txt"
Del  "Q:\Test\2018\05\15\HP-G1610-20180515.json"
========================================
processing 21 "Q:\Test\2018\05\12\text1.txt","Q:\Test\2018\05\12\text2.txt"
Keep "Q:\Test\2018\05\12\text1.txt"
Del  "Q:\Test\2018\05\12\text2.txt"
========================================
processing 22 "Q:\Test\2018\05\20\2.txt","Q:\Test\2018\05\22\version.ps1"
Keep "Q:\Test\2018\05\20\2.txt"
Del  "Q:\Test\2018\05\22\version.ps1"
========================================
processing 288 "Q:\Test\2018\05\11\RawData.txt","Q:\Test\2018\05\23\SO_50478080.ps1"
Keep "Q:\Test\2018\05\11\RawData.txt"
Del  "Q:\Test\2018\05\23\SO_50478080.ps1"

答案 1 :(得分:0)

以下脚本删除当前目录中的重复文件。它留下一个文件,并删除其余的重复文件。我为 Windows 10 开发了脚本,因此它可能不适用于其他 Windows 版本。

这个脚本的优点是它不仅会检查最后修改的日期和时间,还会检查文件大小。假设您有一个带有 *** 符号的文本文件?您可以将它们全部转为### 符号,并且仍然占据相同的空间。该脚本会检查上次修改日期和时间及其大小,以确保两个文件相同,否则不会删除任何文件。

setlocal enabledelayedexpansion
echo(
echo "This program removes duplicate files in the current directory."
echo "Warning: Take a backup of the current directory to avoid accidents"
PAUSE
echo(
set path=%cd%
set /A count=0

for %%a in (*.*) do (
    for %%b in (*.*) do (
        if exist "%%b" if %%a neq %%b (
            if "%%~Ta %%~Za" equ "%%~Tb %%~Zb" (
                echo "%%a File is deleted"
                set /A count+=1
                del "%%a"
            )
        )
    )
)

echo(
echo "---------"
echo "!count! Duplicate Files were deleted in the current directory"
echo "---------"
echo(

endlocal
PAUSE

如果您有任何问题,请向我报告 https://github.com/donqq/Duplicate-File-Remover/