标题: [文件操作] [已解决]批处理怎样实现相似文件名校对只留最新文件删除其余文件? [打印本页]
作者: 511182890 时间: 2015-8-7 17:33 标题: [已解决]批处理怎样比对文件删除重复文件只保留最新创建?
把对比前面相同之后,根据创建日期时间删除老的文件。我需要把BAT文件放在《座套DXF》这个文件夹下,所以需要包含所有子目录
AD1021-G1101-AA-110-主副背料-四向-820.dxf--------------------------------------创建日期2015-8-7 17:10
AD1021-G1101-AA-110-主副背料-四向-821.dxf--------------------------------------创建日期2015-8-7 17:12
AD1021-G1101-AA-110-主副背料-四向-(0000)-821.dxf-----------------------------创建日期2015-8-7 17:15
AD1021-G1101-AA-110-主副背料-四向-(00100)-821.dxf---------------------------创建日期2015-8-7 17:18
AD1021-G1101-AA-110-主副背料-四向-(000f0)-821.dxf----------------------------创建日期2015-8-7 17:20
求大神来条代码,上面这些文件我要求执行代码之后,只留下《创建日期2015-8-7 17:20》这条,对比前面“AD1021-G1101-AA-110-主副背料-四向”有规率的6项5个“-”,这六项相同的情况下,第六个“-”开始不对比,删除只剩余最晚创建的文件。
我有很多的文件及文件夹,同一个文件夹中没有相似的文件,只有在同一个文件中有相似的文件,只要保留一个最新的文件,其余的删除。
作者: pcl_test 时间: 2015-8-7 18:12
本帖最后由 pcl_test 于 2015-8-7 18:56 编辑
- @echo off
- md "筛选结果\" 2>nul
- for /f "tokens=1-6* delims=-" %%a in ('dir /a-d /b /tc /o-d *.dxf') do (
- if not exist "筛选结果\%%a-%%b-%%c-%%d-%%e-%%f*.dxf" (
- copy "%%a-%%b-%%c-%%d-%%e-%%f-%%g" "筛选结果\" /y
- )
- )
- pause
复制代码
作者: 回家路上 时间: 2015-8-7 23:56
参考楼上写个练手- @echo off & setlocal enabledelayedexpansion
- md "筛选结果\" 2>nul
- for /f "tokens=1-6* delims=-" %%a in ('dir /a-d /b /od *.dxf') do set "##%%a-%%b-%%c-%%d-%%e-%%f=%%a-%%b-%%c-%%d-%%e-%%f-%%g"
- for /f "tokens=2 delims==" %%a in ('set ##') do copy %%a "筛选结果\" /y
- pause & exit /b
复制代码
作者: 511182890 时间: 2015-8-8 15:09
本帖最后由 511182890 于 2015-8-8 15:40 编辑
回复 2# pcl_test
我有几千个文件夹,50W+的文件,这样不行,只是复制单独的出来,还是要手动去删除。
作者: pcl_test 时间: 2015-8-8 17:36
本帖最后由 pcl_test 于 2015-8-8 17:39 编辑
回复 4# 511182890
复制出来有误没?没的话,一句del或rd也就能全删了
作者: 511182890 时间: 2015-8-10 08:36
回复 5# pcl_test
不对的,这个只能在同文件夹下执行,我是要包括子文件夹的,我加上了/b /s就变成复制原有文件了
作者: pcl_test 时间: 2015-8-10 10:38
本帖最后由 pcl_test 于 2015-8-10 10:41 编辑
回复 6# 511182890
“不对”是什么意思?是指没有“包括子文件夹”,还是没有找出最晚创建的文件?然你为什么不说清楚清楚“包括子文件夹”?如果是要“包括子文件夹”,那么是找出每个文件夹里的最晚创建的文件,还是找出所有文件夹里的最晚创建的文件?你都问过那么多问题,怎么到现在连个问题都还不会说明?
作者: 511182890 时间: 2015-8-10 13:26
回复 7# pcl_test
你的代码,放在有文件的文件夹中是可以复制的,如果放在上一层文件夹中,就不会复制。
我是有很多文件及很多文件夹,不同文件夹中没有相似的文件,只有在同一个文件夹中的文件有可能会相似,所以要保留一个最新的文件。
作者: pcl_test 时间: 2015-8-10 13:46
回复 8# 511182890
因为你顶楼并没有说“包括子文件夹”,所以当然不可以,要实现也简单,for /r 或是for /f …in ('dir /s…')都可以遍历文件夹
作者: 慕夜蓝化 时间: 2015-8-10 14:08
本帖最后由 慕夜蓝化 于 2015-8-10 14:11 编辑
- echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /s/b/l/ad') do (
- for /f "delims=" %%a in ('dir /b /l /aa /o-d "%%i\*.dxf"') do (
- set/aa+=1
- if !a! neq 1 del /f/q "%%i\%%a"
- )
- set/aa=0
- )
- pause
复制代码
作者: 511182890 时间: 2015-8-10 14:14
回复 10# 慕夜蓝化
不行,结果这样的- C:\Documents and Settings\Administrator\桌面\新建文件夹 (2)>echo off
- 找不到文件
- 请按任意键继续. . .
复制代码
作者: 511182890 时间: 2015-8-10 14:15
回复 9# pcl_test
帮忙改个完整的。谢谢,
作者: 511182890 时间: 2015-8-13 13:44 标题: [已解决]批处理怎样实现相似文件名校对只留最新文件删除其余文件?
本帖最后由 511182890 于 2015-9-22 14:21 编辑
AD1021-G1101-AA-110-主副背料-四向-820.dxf--------------------------------------创建日期2015-8-7 17:10
AD1021-G1101-AA-110-主副背料-四向-821.dxf--------------------------------------创建日期2015-8-7 17:12
AD1021-G1101-AA-110-主副背料-四向-(0000)-821.dxf-----------------------------创建日期2015-8-7 17:15
AD1021-G1101-AA-110-主副背料-四向-(00100)-821.dxf---------------------------创建日期2015-8-7 17:18
AD1021-G1101-AA-110-主副背料-四向-(000f0)-821.dxf----------------------------创建日期2015-8-7 17:20
求大神来条代码,上面这些文件我要求执行代码之后,只留下《创建日期2015-8-7 17:20》这条,对比前面“AD1021-G1101-AA-110-主副背料-四向”有规率的6项5个“-”,这六项相同的情况下,第六个“-”开始不对比,删除只剩余最晚创建的文件。
我有很多的文件及文件夹,不同文件夹中没有相似的文件,只有在同一个文件中有相似的文件,只要保留一个最新的文件,其余的删除。
作者: xudaweb 时间: 2015-8-13 18:15
既然只有在同一个文件夹才有相似的文件,感觉只要取最新的就可以了,不用比对前缀了吧?- @echo off
- for /f "delims=" %%i in ('dir /b /a /od *.dxf') do (
- set "the_latest=%%i"
- )
- copy %the_latest% %the_latest%.BAK
- del *.dxf
- ren %the_latest%.BAK %the_latest%
- pause>nul
复制代码
作者: 回家路上 时间: 2015-8-13 18:49
预测,你再不上执行样本,你的这个问题的三个帖子要被标记为水军了。
各种各样的回答,都不正确。我都不信了。
发帖的时候,把之前关联的链接也发一下呗。
你这需求还是复制第一个。。。。。。然后就循环了。
作者: 511182890 时间: 2015-8-15 08:56
回复 2# xudaweb
不对比我有别的文件的啊,那不是把我别的文件只删除的一个文件夹只留一个文件?
作者: 511182890 时间: 2015-8-19 12:52 标题: [已解决]批处理怎样比对文件删除重复文件只保留最新创建?
把对比前面相同之后,根据创建日期时间删除老的文件。我需要把BAT文件放在《座套DXF》这个文件夹下,所以需要包含所有子目录
-
-
-
-
-
-
-- AD1021-G1101-AA-110-主副背料-四向-820.dxf--------------------------------------创建日期2015-8-7 17:10
- AD1021-G1101-AA-110-主副背料-四向-821.dxf--------------------------------------创建日期2015-8-7 17:12
- AD1021-G1101-AA-110-主副背料-四向-(0000)-821.dxf-----------------------------创建日期2015-8-7 17:15
- AD1021-G1101-AA-110-主副背料-四向-(00100)-821.dxf---------------------------创建日期2015-8-7 17:18
- AD1021-G1101-AA-110-主副背料-四向-(000f0)-821.dxf----------------------------创建日期2015-8-7 17:20
复制代码
上面的是文件- @echo off
- for /f "tokens=1-7delims=-" %%a in ('dir /b /s /o-d /tw *-*.dxf') do (
- if defined %%a-%%b-%%c-%%d-%%e-%%f (
- del /f /q "%%a-%%b-%%c-%%d-%%e-%%f-%%g"
- ) else set %%a-%%b-%%c-%%d-%%e-%%f=1
- )
复制代码
已有代码求修改,比对上面文件删除重复文件只保留最新创建,如上面就保留《AD1021-G1101-AA-110-主副背料-四向-(000f0)-821.dxf----------------------------创建日期2015-8-7 17:20》,比对第六个“-”之前的内容相同只保留最新创建文件。
所有文件都是DXF格式,有很多个文件夹,只比对同一个文件夹下,跨文件夹的不比对。
作者: pcl_test 时间: 2015-8-19 13:10
重复帖
http://www.bathome.net/viewthread.php?tid=36899
http://www.bathome.net/viewthread.php?tid=36812
作者: 511182890 时间: 2015-8-19 13:15
回复 2# pcl_test
没有解决啊,我只能重复发啊!
作者: 511182890 时间: 2015-9-14 14:00
回复 2# pcl_test
老大我从新编辑了帖子麻烦大神帮忙研究研究。
作者: flyinnet9 时间: 2015-9-14 15:06
- @echo off
- for /f "delims=" %%i in ('dir /ad /s /b') do (
- pushd "%%i"
- for /f "tokens=1-6* delims=-" %%a in ('dir /b /o-d /tc *-*.dxf') do (
- if defined %%a-%%b-%%c-%%d-%%e-%%f (
- del /f /q "%%a-%%b-%%c-%%d-%%e-%%f-%%g" 2>nul
- ) else set %%a-%%b-%%c-%%d-%%e-%%f=1
- )
- set %%a-%%b-%%c-%%d-%%e-%%f=
- popd
- )
复制代码
作者: 511182890 时间: 2015-9-18 14:19
回复 21# flyinnet9
谢谢大神。可以OK
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |