从包含大量重复项的文件夹中删除包含5个以上重复项的文件

时间:2016-03-10 13:28:55

标签: windows batch-file duplicates

好的,所以这让我疯了,但我会尝试解释自己以及我可以:)

我有一个重复文件夹和非重复文件夹,如下所示

1.txt
1.txt
1.txt
2.txt
2.txt
3.txt
3.txt
4.txt
4.txt
4.txt
4.txt
5.txt
6.txt
7.txt
7.txt
7.txt
7.txt
8.txt

现在我只想找到超过3个文件的副本,在这种情况下,这将是所有7.txt4.txt个文件。但文件会转到infinity.txt

所以我无法预先设定条件。脚本必须认识到有超过3个重复,所以我可以提取这些文件。

---好吧所以我尝试了下面的脚本,但是它没有像上面提到的那样“提取”。

Here是我问过的一个问题的链接,但是我还在努力解释它。

`@echo off
 setlocal EnableDelayedExpansion

 for %%a in (*.eml) do (
  for /F "tokens=3 delims=_" %%b in ("%%~Na") do (
   set "fileTime=%%b"
    for %%t in (!fileTime:~0^,4!) do (
     set /A "count[%%t]+=1"
     set names[%%t]=!names[%%t]! "%%a"
      )
   )
)

 for /F "tokens=2,3 delims=[]=" %%a in ('set count[') do (
  if %%b gtr 1 (
    for %%c in (!names[%%a]!) do (
      type "%%~c" >> C:\output\%%~ci.eml
      )
   )
)`

1 个答案:

答案 0 :(得分:2)

@ECHO OFF
SETLOCAL EnableDelayedExpansion

FOR %%a in (*.eml) DO (
FOR /F "tokens=3 delims=_" %%b IN ("%%~Na") DO (
  SET "fileTime=%%b"
  FOR %%t in (!fileTime:~0^,4!) DO (
     SET /A "count[%%t]+=1"
     SET names[%%t]=!names[%%t]! "%%a"
      )
   )
)

FOR /F "tokens=2,3,4 delims=[]=" %%a IN ('set count[') DO (
IF %%b gtr 3 (
   FOR %%c IN (!names[%%a]!) DO (
       TYPE "%%~c" >> C:\output\%%~ci.eml
      )
   )
)

我错过了一个代币...感谢帮助人员。所以脚本现在正在运行。它会向.eml文件夹发送包含3个以上相同前缀的output个文件。