[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 如何分别删除所有子文件夹下同名文件中除了数字序号最大的一个文件外的所有其他文件

本帖最后由 pcl_test 于 2016-11-16 18:03 编辑

现在有很多软件操作,每保存一次文件,就会重新生成一个新的文件,文件名是一样的,但是,在后缀后面会自动增加一个数字序号,用来表示此文件的修改版本

往往文件完成后,会产生大量的前期版本文件,求一个一次性操作删除旧版本文件的BAT。

如:*.jpg.1 *.jpg.2 *.jpg.3 *.bmp.1 *.bmp.2 *.bmp.3 *.gif.1 *.gif.2 *.gif.3 ........

执行批处理后,所有文件夹及子文件夹,只保留最后的一个版本的文件,如*.jpg.3 *.bmp.3 *.gif.3

如果,文件夹中只有一个文件,同样保留,如,只有*.jpg.1,那么,保留。

但是,删除文件的提前是只在当前文件夹中作比较,也就是说,在不同的文件夹中,可能会有同名文件,不作统一的比较,只在本文件夹中保留同名文件的最后一个版本。

也就是说:

1.各个文件夹相对独立,不和其它文件夹作比较

2.相同文件夹下的不同格式及不同名称文件,不和其它格式及不同名称文件作比较,即00.jpg.*不会和00.bmp.*不会和00.gif.*作比较

谢谢~!

首先非常感谢2楼和3楼的兄弟,谢谢~!!!

我赶紧试试先

TOP

回复 2# pcl_test


    感谢兄弟~!

    不过,我刚才在试验的时候,将E:\test\替换成存放BAT的目录,运行后,发现了两个问题:

1.当前文件夹内,除了子文件夹外,所有文件都删除了,包括bAT本身。

2.子文件夹下的文件依然存在,没有变动。

TOP

回复 3# 545810831


    感谢这位兄弟~!

第一时间试验了下也发现了一个问题:

BAT只作用在当前的文件夹,子文件夹同样是没有变动。

我是希望所有的子文件夹都有同样的作用,谢谢~!

TOP

本帖最后由 awei 于 2015-1-10 08:45 编辑

补充说明:

同时删除多个不同格式的文件,如*.jpg  *.bmp

弱弱问,是不是可以用逗号来分开?

如:

将('dir /b  *.jpg*')

改成('dir /b *.jpg,.bmp*‘)

谢谢~!

TOP

回复 3# 545810831


    我自己试了,还不会弄直接删除多个不同格式的文件。求教~!

我将:('dir /b *.jpg*')
改成:('dir /b /s *.jpg*') ,实现了作用于所有子文件夹的功能。

TOP

本帖最后由 awei 于 2015-1-10 09:24 编辑

回复 9# 慕夜蓝化


    我是文件夹中有多种格式的文件,但,它们都是在后缀的最后会加上.1 .2 .3 ...这样的序号,如:*.jpg.1 *.jpg.2    *.bmp.1 *.bmp.2 .......

   我在执行BAT时,希望只保留这些不同文件的最后一个,3楼的大神已经帮我实现了,只是,他只写了删除一种格式文件的,但我不会修改,请帮忙,谢谢~!

TOP

回复 9# 慕夜蓝化


    谢谢你,我已经自己摸索出来了,加空格键就可以了,谢谢~!

如:('dir /b /s *.jpg* *.bmp*')

TOP

再次感谢:

2# pcl_test     

3# 545810831         

9# 慕夜蓝化

TOP

各位大神,发现了一个问题:

这个检测功能存在一个全局性,如果我的各种格式文件中,有一个的后缀序号比较大,那么,执行程序后,所有文件夹中的文件都删除了,只保留下这个最大序号的文件了。。。。

如多个子文件夹里都存在:*.jpg.1 *.jpg.2 *.jpg.80 *.bmp.1 *.bmp.2

执行BAT后:所有文件夹都只保留了*.jpg.80这么一个文件了,连*.bmp文件也没有了。

如果多种格式的后缀最大序号相同,那么,都保留了。

如有*.jpg.80和*.bmp.80,那么,其它文件全删,保留这两个最大的。

求完善,谢谢~!

TOP

回复 13# 慕夜蓝化


    也可以说是删除最新文件以外的文件,

   但,需要多种不同格式文件并存,

  也就是说,这个“最新”只针对同一个文件名的文件

如:*.jpg.1 *.jpg.2 *.jpg.80 *.jpg.521   *.bmp.3 *.bmp.8 *.bmp.120 *.bmp.421 *.bmp.550 *.gif.20 *.gif.35 *.gif.45 *.gif.222

执行BAT后,保留:

*.jpg.521  *.bmp.550  *.gif.222

如果能实现  在识别序号的基础上   再针对相同文件名的文件作时间上的对比,优先保留最新时间的文件,则更加的理想。谢谢~!

TOP

回复 16# 慕夜蓝化


    试过了你的代码,发现如下问题:

1.当前文件夹文件没有删除,只作用于子文件夹

2.同时存在两种不同格式文件时,会作出比较,然后保留了相同序号的文件,这是其中一个格式有用,另一个却又无效。

3.相同的几个文件,继续执行BAT,则保留了相同的小序号的文件,大的序号则删除了。

TOP

本帖最后由 awei 于 2015-1-10 14:22 编辑

回复 17# xxpinqz


    测试过后,发现了两个问题:

1.后缀最大序号为82

如果小于82的序号,则可以实现功能

如果大于82,则会被删除。

通常来说,这个序号是可以无限大的,但,由于经常性的清理旧版本文件,所以,这个数一般也不会太过离谱,但,在三五千以下就比较保险了。^-^

2.各种文件(我测试了三种,而且,我至少需要三种),会按照其中序号相同的来排序,而且是保留序号小的文件,其它文件都删除


请大神修正,谢谢~!

TOP

回复 17# xxpinqz
回复 2# pcl_test
回复 3# 545810831
回复 13# 慕夜蓝化

    我修改了规则,前面说得不够清晰,抱歉:

现在有很多软件操作,每保存一次文件,就会重新生成一个新的文件,文件名是一样的,但是,在后缀后面会自动增加一个数字序号,用来表示此文件的修改版本

往往文件完成后,会产生大量的前期版本文件,求一个一次性操作删除旧版本文件的BAT。

如:*.jpg.1 *.jpg.2 *.jpg.3 *.bmp.1 *.bmp.2 *.bmp.3 *.gif.1 *.gif.2 *.gif.3 ........

执行批处理后,所有文件夹及子文件夹,只保留最后的一个版本的文件,如*.jpg.3 *.bmp.3 *.gif.3

如果,文件夹中只有一个文件,同样保留,如,只有*.jpg.1,那么,保留。

但是,删除文件的提前是只在当前文件夹中作比较,也就是说,在不同的文件夹中,可能会有同名文件,不作统一的比较,只在本文件夹中保留同名文件的最后一个版本。

也就是说:

1.各个文件夹相对独立,不和其它文件夹作比较

2.相同文件夹下的不同格式及不同名称文件,不和其它格式及不同名称文件作比较,即00.jpg.*不会和00.bmp.*不会和00.gif.*作比较

谢谢~!

TOP

回复 21# apang


    测试过发现两个问题:

1.只作用于当前文件夹,无法作用子文件夹

2.自动检测后缀功能非常好,不过,似乎有点乱,相同后缀,但不同名称的文件,只保留了其中之一,而且不固定是哪一个。

TOP

返回列表