找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 80100|回复: 19

[文件操作] 无指定文件名条件下的多子目录中文件筛选、剔除批处理

[复制链接]
发表于 2012-6-1 08:22:54 | 显示全部楼层 |阅读模式
情况:
      在一个文件夹A中,有多个子目录
      
      这些文件夹可以称作为A的子目录,在这些子目录中有某几目录中会存在重复的文件,其名字可能是:
      com.rockyourphone.rockextensions_1.01_iphoneos-arm.deb
      也可能是:
      mobilesubstrate_0.9.3998_iphoneos-arm.deb
      上面的deb文件,不是一个文件,而是两个分别有可能被重复的文件的名字。感谢4楼的提醒
      其重复的个数不确定,被重复的文件名也不仅是上面两个文件名,可能还有C、D之类的文件,不过
      这些文件的类型都是deb格式。

问题:
      一、如何能把重复的文件筛选出来,以供汇总或者是了解文件的分布情况;
      二、如何能在已筛选出的文件中指定任意个文件,以便删除之。

期待大家的帮忙,谢谢!
 楼主| 发表于 2012-6-1 08:24:29 | 显示全部楼层
不知道为什么,第三个图片文件总是在最下方显示?编辑的时候不是这样的。
发表于 2012-6-1 09:53:29 | 显示全部楼层
顶礼楼主,提出了一个很实用的问题,同求达人解决啊!最好再加上时间标注,因为有时候相同文件名的生成时间是不一样的,说明内容也有变化
发表于 2012-6-1 09:57:38 | 显示全部楼层
名字不一样怎么能知道是否重复?根据大小来判断?
 楼主| 发表于 2012-6-1 10:50:25 | 显示全部楼层
回复 3# formyth


    呵呵,谢谢关注,我们也别闲着,也收集一些相关的代码,研究着来。

用时间来筛选的话也是可以的,不过先把最基本的写法学习到后,就可以把时间的条件加进去了。
 楼主| 发表于 2012-6-1 10:52:06 | 显示全部楼层
回复 4# yangfengoo


    这里说得“名字不一样”和我帖子中提到的名字不同不是一个概念,感谢你的关注,你可以再看看帖子的内容。

注:名字不一样,代表着不只是一个文件被重复了
发表于 2012-6-1 12:26:52 | 显示全部楼层
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. (
  4. for /f "delims=" %%a in ('dir /a-d /s /b') do (
  5.   set /a #%%~nxa+=1
  6.   set $%%~nxa/!#%%~nxa!=%%a
  7.   if !#%%~nxa! gtr 1 (
  8.     if !#%%~nxa!==2 (echo !$%%~nxa/1!)
  9.     echo %%a
  10.   )
  11. )
  12. )>result.txt
  13. pause
复制代码
楼主你好笨哦,复制个文件名都要截图,直接F2、Ctrl+C、Ctrl+V不就行了。。。
 楼主| 发表于 2012-6-1 14:41:25 | 显示全部楼层
回复 7# powerbat


    截图是为了让问题更清楚些,也是为了大家看着方便。

谢谢你的代码,我将测试,如果成功,颇为感谢。

哈哈
=======================================
测试后的结果为:

各种的运算符不存在,请再看一下。
发表于 2012-6-1 14:52:34 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in ('dir /a-d /b /s "A\*.deb"') do (
  3.   if not defined .%%~nxa (set .%%~nxa=1) else echo %%~nxa
  4. ))>$
  5. endlocal
  6. for /f "delims=" %%a in ($) do (
  7.   if not defined .%%a dir /a-d /b /s "A\%%a"&set .%%a=1
  8. )
  9. del $
  10. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
formyth + 1 太强大了!

查看全部评分

 楼主| 发表于 2012-6-1 15:41:40 | 显示全部楼层
回复 9# apang


    这段代码可以找到重复的文件,但是del $ 这句却不能将它们删除

而且关于这里的删除应该是可交互的删除,即可指定删除哪一个。并且要保证最后至少保留一个文件,不然就都没了,呵呵。
发表于 2012-6-1 17:01:05 | 显示全部楼层
回复 10# hacker85

试试
  1. @echo off
  2. (for /f "delims=" %%a in ('dir /a-d /b /s "A\*.*"') do (
  3.   if not defined .%%~nxa (set .%%~nxa=1) else echo %%~nxa
  4. ))>$
  5. (for /f "delims=" %%a in ($) do (
  6.   if not defined _%%a dir /a-d /b /s "A\%%a"&set _%%a=1
  7. ))>result.txt
  8. del $
  9. findstr /n ".*" result.txt&&set/p num=选择序号(空格隔开):
  10. for %%a in (%num%) do (
  11.   for /f "tokens=1* delims=:" %%b in ('findstr /n ".*" result.txt') do (
  12.     if "%%a"=="%%b" echo del /q "%%c"
  13.   )
  14. )
  15. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
hacker85 + 1 very good! 3Q

查看全部评分

发表于 2012-6-1 17:19:34 | 显示全部楼层
回复 7# powerbat


    忘了文件名中有特殊字符了。

  1. @echo off
  2. setlocal enableDelayedExpansion
  3. (
  4. for /f "delims=" %%a in ('dir /a-d /s /b') do (
  5.   set #%%~nxa=!#%%~nxa!/
  6.   set $%%~nxa!#%%~nxa!=%%a
  7.   if !#%%~nxa! neq / (
  8.     if !#%%~nxa!==// (echo !$%%~nxa/!)
  9.     echo %%a
  10.   )
  11. )
  12. )>result.txt
  13. pause
复制代码
一个图片中就一个名字,你不觉得浪费吗?也无法达到“看着方便”的目的。特别是对我这种网速慢的,等图片下载要等半天。

评分

参与人数 1技术 +1 收起 理由
hacker85 + 1 不错的代码

查看全部评分

发表于 2012-6-1 18:01:52 | 显示全部楼层
回复 8# hacker85


    这样的截图有什么意义?人家又看不到是哪行代码在报错。去医院看病总不能只说一句疼,至于哪里疼就让医生去猜吧。
 楼主| 发表于 2012-6-3 13:15:42 | 显示全部楼层
回复 12# powerbat


    文件名已更正。
 楼主| 发表于 2012-6-3 13:16:45 | 显示全部楼层
回复 13# gawk


    文件名已更正。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:29 , Processed in 0.014394 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表