标题: [文件操作] 无指定文件名条件下的多子目录中文件筛选、剔除批处理 [打印本页]
作者: hacker85 时间: 2012-6-1 08:22 标题: 无指定文件名条件下的多子目录中文件筛选、剔除批处理
情况:
在一个文件夹A中,有多个子目录
这些文件夹可以称作为A的子目录,在这些子目录中有某几目录中会存在重复的文件,其名字可能是:
com.rockyourphone.rockextensions_1.01_iphoneos-arm.deb
也可能是:
mobilesubstrate_0.9.3998_iphoneos-arm.deb
上面的deb文件,不是一个文件,而是两个分别有可能被重复的文件的名字。感谢4楼的提醒
其重复的个数不确定,被重复的文件名也不仅是上面两个文件名,可能还有C、D之类的文件,不过
这些文件的类型都是deb格式。
问题:
一、如何能把重复的文件筛选出来,以供汇总或者是了解文件的分布情况;
二、如何能在已筛选出的文件中指定任意个文件,以便删除之。
期待大家的帮忙,谢谢!
作者: hacker85 时间: 2012-6-1 08:24
不知道为什么,第三个图片文件总是在最下方显示?编辑的时候不是这样的。
作者: formyth 时间: 2012-6-1 09:53
顶礼楼主,提出了一个很实用的问题,同求达人解决啊!最好再加上时间标注,因为有时候相同文件名的生成时间是不一样的,说明内容也有变化
作者: yangfengoo 时间: 2012-6-1 09:57
名字不一样怎么能知道是否重复?根据大小来判断?
作者: hacker85 时间: 2012-6-1 10:50
回复 3# formyth
呵呵,谢谢关注,我们也别闲着,也收集一些相关的代码,研究着来。
用时间来筛选的话也是可以的,不过先把最基本的写法学习到后,就可以把时间的条件加进去了。
作者: hacker85 时间: 2012-6-1 10:52
回复 4# yangfengoo
这里说得“名字不一样”和我帖子中提到的名字不同不是一个概念,感谢你的关注,你可以再看看帖子的内容。
注:名字不一样,代表着不只是一个文件被重复了
作者: powerbat 时间: 2012-6-1 12:26
- @echo off
- setlocal enableDelayedExpansion
- (
- for /f "delims=" %%a in ('dir /a-d /s /b') do (
- set /a #%%~nxa+=1
- set $%%~nxa/!#%%~nxa!=%%a
- if !#%%~nxa! gtr 1 (
- if !#%%~nxa!==2 (echo !$%%~nxa/1!)
- echo %%a
- )
- )
- )>result.txt
- pause
复制代码
楼主你好笨哦,复制个文件名都要截图,直接F2、Ctrl+C、Ctrl+V不就行了。。。
作者: hacker85 时间: 2012-6-1 14:41
回复 7# powerbat
截图是为了让问题更清楚些,也是为了大家看着方便。
谢谢你的代码,我将测试,如果成功,颇为感谢。
哈哈
=======================================
测试后的结果为:
各种的运算符不存在,请再看一下。
作者: apang 时间: 2012-6-1 14:52
- @echo off&setlocal enabledelayedexpansion
- (for /f "delims=" %%a in ('dir /a-d /b /s "A\*.deb"') do (
- if not defined .%%~nxa (set .%%~nxa=1) else echo %%~nxa
- ))>$
- endlocal
- for /f "delims=" %%a in ($) do (
- if not defined .%%a dir /a-d /b /s "A\%%a"&set .%%a=1
- )
- del $
- pause
复制代码
作者: hacker85 时间: 2012-6-1 15:41
回复 9# apang
这段代码可以找到重复的文件,但是del $ 这句却不能将它们删除
而且关于这里的删除应该是可交互的删除,即可指定删除哪一个。并且要保证最后至少保留一个文件,不然就都没了,呵呵。
作者: apang 时间: 2012-6-1 17:01
回复 10# hacker85
试试- @echo off
- (for /f "delims=" %%a in ('dir /a-d /b /s "A\*.*"') do (
- if not defined .%%~nxa (set .%%~nxa=1) else echo %%~nxa
- ))>$
- (for /f "delims=" %%a in ($) do (
- if not defined _%%a dir /a-d /b /s "A\%%a"&set _%%a=1
- ))>result.txt
- del $
- findstr /n ".*" result.txt&&set/p num=选择序号(空格隔开):
- for %%a in (%num%) do (
- for /f "tokens=1* delims=:" %%b in ('findstr /n ".*" result.txt') do (
- if "%%a"=="%%b" echo del /q "%%c"
- )
- )
- pause
复制代码
作者: powerbat 时间: 2012-6-1 17:19
回复 7# powerbat
忘了文件名中有特殊字符了。- @echo off
- setlocal enableDelayedExpansion
- (
- for /f "delims=" %%a in ('dir /a-d /s /b') do (
- set #%%~nxa=!#%%~nxa!/
- set $%%~nxa!#%%~nxa!=%%a
- if !#%%~nxa! neq / (
- if !#%%~nxa!==// (echo !$%%~nxa/!)
- echo %%a
- )
- )
- )>result.txt
- pause
复制代码
一个图片中就一个名字,你不觉得浪费吗?也无法达到“看着方便”的目的。特别是对我这种网速慢的,等图片下载要等半天。
作者: gawk 时间: 2012-6-1 18:01
回复 8# hacker85
这样的截图有什么意义?人家又看不到是哪行代码在报错。去医院看病总不能只说一句疼,至于哪里疼就让医生去猜吧。
作者: hacker85 时间: 2012-6-3 13:15
回复 12# powerbat
文件名已更正。
作者: hacker85 时间: 2012-6-3 13:16
回复 13# gawk
文件名已更正。
作者: hacker85 时间: 2012-6-3 13:24
回复 12# powerbat
如今这段代码可以实现筛选功能了,在新生成的文件中可以看到重复文件的情况。
只是还没有删除功能,不过别的网友已经写出来了。不错,学习中……
作者: hacker85 时间: 2012-6-3 13:38
回复 11# apang
感谢你的这段代码,现在代码呈现的出来的感觉已经很不错了,只不过有两个问题没有解决:
1、依然没有删除重复文件的功能。现在虽然可以在窗口里以序号的方式看到重复文件的名字及位置,但是当用空格分隔两个序号后回车,发现
这时候去文件夹中查看文件,发现还在。
当只输入一个序号的时候,删除文件时也是如此提示,而文件并没有被删除。
2、总体看来,软件显示的结果因为文件名过长、过多的原因,导致整个窗口乱作一团,一时间不容易区分出哪个软件被重复了,所以我建议能不能
加入一个列表或者是汇总功能。
比如最终出现的结果是在现在的基础上变为:
apt7-lib_0.7.25.3-9_iphoneos-arm.deb:
1:F:\Downloads\iphone\工具、补丁\Cyder2\archives\APT0.7.25.3-6\apt7-lib_0.7.25.3
-9_iphoneos-arm.deb
2:F:\Downloads\iphone\工具、补丁\Cyder2\archives\aptitude\apt7-lib_0.7.25.3-9_ip
honeos-arm.deb
dpkg_1.14.25-9_iphoneos-arm.deb:
3:F:\Downloads\iphone\工具、补丁\Cyder2\archives\APT0.7.25.3-6\dpkg_1.14.25-9_ip
honeos-arm.deb
4:F:\Downloads\iphone\工具、补丁\Cyder2\archives\aptitude\dpkg_1.14.25-9_iphoneo
s-arm.deb
5:F:\Downloads\iphone\工具、补丁\Cyder2\archives\bitesms6.2\dpkg_1.14.25-9_iphon
eos-arm.deb
6:F:\Downloads\iphone\工具、补丁\Cyder2\archives\mobileterminal520-2\dpkg_1.14.2
5-9_iphoneos-arm.deb
……
作者: apang 时间: 2012-6-3 15:25
回复 17# hacker85
1.去掉"echo del /q"前面的echo,就可以真正删除文件了。
2.代码搞的很罗嗦,觉得没啥必要。。。
作者: hacker85 时间: 2012-6-4 09:47
回复 18# apang
1、昨天细看了一下代码,发现是多了一个echo,今天来看帖子,发现您指出了这个问题。
2、代码太复杂确实没有什么必要,但是如果有时间的话,还真是希望您能指点一下这个“美化”的代码的写法。
再次感谢
作者: 喃喃努努 时间: 2012-6-4 10:29
学习一下,但是这种情况不会经常发生吧。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |