无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 9970|回复: 11
打印 上一主题 下一主题

[求助] 如何根据文件名列表批量搜索文件

[复制链接]
跳转到指定楼层
1#
发表于 2014-3-20 14:39:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 overcet6 于 2014-3-20 17:34 编辑

比如我要找的文件时13512345678.MP3这样的文件,是有500文件列表保存在TXT中
要在一个大文件夹有10000个文件里搜索,但是这里面的文件名称是形如:1001A13512345678B20140303133232323C16.MP3
这样的文件,有可能有重复,就是一个要查找的号码对应两个或三个这样的长文件名的文件,

根据列表找到文件,把找到的文件重新命名成列表里的名字。如果重命名后文件名重复,自动在后面加“-1”这样的字符以区分
当然了,如果要是能复制出来,或者剪切出来,要新的文件夹里更好了,

请问这种要是用DOS批处理,该怎么做~~~~~~~


我现在都是用dos命令导出文件名列表在excel里,然后再用简单的批处理ren改名字,有点麻烦
有没有一个批处理文件就能一键搞定的,

这里面有一点就是有可能有重复的情况,找了很多软件都不智能,没有判断重复的选项。



最好就是,指定要搜索的源文件夹,指定文件名列表,指定目标文件夹,然后一键搞定,有重复的自动加序号区分。
2#
发表于 2014-3-20 21:32:23 | 只看该作者
给一个另类解
假设列表文件list.txt,待搜索文件夹D:\ABC,代码保存为test.bat与list.txt放在一起
  1. Set re=Nothing ''&cls&dir /a-d/b/s "D:\ABC"|cscript -nologo -e:vbscript "%~f0" &pause&exit/b
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. s = WScript.StdIn.ReadAll
  4. Set file = fso.OpenTextFile("List.txt", 1)
  5. while not file.AtEndOfStream
  6.     strLine = Trim(file.ReadLine)
  7.     If strLine <> "" Then
  8.         name = fso.GetBaseName(strLine)
  9.         ext = fso.GetExtensionName(strLine)
  10.         pattern = "(.+\\).*" & name & "[^\\]*\." & ext
  11.         RenMyFile pattern, name, "." & ext
  12.     End If
  13. wend

  14. Sub RenMyFile(strPattern, strName, strExt)
  15.     Set re = New RegExp
  16.     re.Pattern = strPattern
  17.     re.Global = true
  18.     re.IgnoreCase = true
  19.     For Each m In re.Execute(s)
  20.         path = m.SubMatches(0)
  21.         strNewName = strName & strExt
  22.         n = 0
  23.         while fso.FileExists(path & strNewName)
  24.             n = n + 1
  25.             strNewName = strName & "-" & n & strExt
  26.         wend
  27.         fso.GetFile(m).Name = strNewName
  28.     Next
  29. End Sub
复制代码

评分

参与人数 1无忧币 +5 收起 理由
overcet6 + 5 很给力!

查看全部评分

回复

使用道具 举报

3#
发表于 2014-3-20 22:06:45 | 只看该作者
用两个 for 加上 dir /b /s 和 find 就可以 搞定 。
太晚了 ,明天 如果 还需要 ,我 给你研究研究 。
回复

使用道具 举报

4#
发表于 2014-3-21 10:44:50 | 只看该作者
本帖最后由 dos时代菜鸟 于 2014-3-21 10:55 编辑

脚本设定 文件类型 jpg 路径 e:\

  1. @echo off && setlocal ENABLEDELAYEDEXPANSION
  2. set p1=e:\
  3. set ext=jpg

  4. dir %p1%*.%ext% /b /s /a-d >%temp%\f2.txt
  5. echo 搜索路径:!p1!...........
  6. for /f "delims=" %%c in (file.txt) do (
  7. set name0=%%~nc
  8. echo 正在搜索并处理 !name0!.............
  9. for /f "skip=2 delims=" %%i in ('find /i "%%~nc" "%temp%\f2.txt"') do (
  10. set oldn=%%i
  11. set name=%%~dpi\!name0!
  12. call :nn
  13.    echo "!oldn!"-^>"!name0!_!n1!.!ext!"
  14.    ren "!oldn!" "!name0!_!n1!.!ext!"
  15. )
  16. )
  17. pause
  18. del "%temp%\f2.txt"
  19. goto :eof
  20. :nn
  21. set /a n1=0
  22. :nn2
  23. if exist "!name!_!n1!.!ext!" (
  24.         set /a n1=!n1!+1
  25.              goto nn2
  26.         )
复制代码

捕获.JPG (43.13 KB, 下载次数: 70)

捕获.JPG

捕获.JPG (9.77 KB, 下载次数: 67)

捕获.JPG

评分

参与人数 1无忧币 +5 收起 理由
overcet6 + 5 很给力!

查看全部评分

回复

使用道具 举报

5#
 楼主| 发表于 2014-3-21 11:48:37 | 只看该作者
pznpt 发表于 2014-3-20 21:32
给一个另类解
假设列表文件list.txt,待搜索文件夹D:\ABC,代码保存为test.bat与list.txt放在一起

这个试了一下,很好用,谢谢
老大别怪我得寸进尺啊,要是list.txt里 有找不到的号码,能不能显示出来。最好是能够保存在一个txt里。或者不显示直接保存出来在txt里

点评

在19与20行之间插入一行: 试试吧  详情 回复 发表于 2014-3-21 15:00
回复

使用道具 举报

6#
发表于 2014-3-21 13:08:13 | 只看该作者
如果是搜索指定的文件或者一类的文件,然后删除,同时把删除的文件的带绝对路径的信息写入到一个文本文件改如何写。再或者删除文件删除失败的文件写入到一个文本如何写。

评分

参与人数 1无忧币 +5 收起 理由
overcet6 + 5 很给力!

查看全部评分

回复

使用道具 举报

7#
 楼主| 发表于 2014-3-21 14:17:29 | 只看该作者
本帖最后由 overcet6 于 2014-3-24 08:50 编辑
dos时代菜鸟 发表于 2014-3-21 10:44
脚本设定 文件类型 jpg 路径 e:\


谢谢帮忙,这个试了一下,也不错!!

点评

何为:相同类型的文件夹  详情 回复 发表于 2014-3-23 21:02
回复

使用道具 举报

8#
 楼主| 发表于 2014-3-21 14:21:53 | 只看该作者
freesoft00 发表于 2014-3-21 13:08
如果是搜索指定的文件或者一类的文件,然后删除,同时把删除的文件的带绝对路径的信息写入到一个文本文件改 ...

如果你要搜索的文件都在同一个文件夹,那要绝对路径有何用呢?如果纯用DOS我不会,要是用软件,倒是好办,你把所有要搜索的文件通过dir  /b>123.xls的方法导出到EXCEL,再在excel里和你要找的文件列表vlookup,不就找到删除失败的文件了?
回复

使用道具 举报

9#
发表于 2014-3-21 15:00:00 | 只看该作者
本帖最后由 pznpt 于 2014-3-21 15:05 编辑
overcet6 发表于 2014-3-21 11:48
这个试了一下,很好用,谢谢
老大别怪我得寸进尺啊,要是list.txt里 有找不到的号码,能不能显示出来。 ...


在19与20行之间插入一行:
  1. If Not re.Test(s) Then fso.OpenTextFile("NoFound.txt", 8, true).WriteLine strName & strExt
复制代码

试试吧
回复

使用道具 举报

10#
 楼主| 发表于 2014-3-21 17:20:31 | 只看该作者
pznpt 发表于 2014-3-21 15:00
在19与20行之间插入一行:

试试吧

好的,谢谢
回复

使用道具 举报

11#
发表于 2014-3-23 21:02:24 | 只看该作者
本帖最后由 dos时代菜鸟 于 2014-3-23 21:07 编辑
overcet6 发表于 2014-3-21 14:17
谢谢帮忙,因为我是要在相同类型的文件夹里找到部分文件,省去了用windows自带的搜索工具一个一个搜索, ...


何为:相同类型的文件夹

要搜索 各类文件 ,你直接把  jpg 换成 * 就可以了 。这个脚本 功能 不只是 搜索 还有 更名 。

唉 ,不会是 又一个 只要 鱼 而不肯要 渔 的吧 。呵呵。
回复

使用道具 举报

12#
 楼主| 发表于 2014-3-24 08:59:18 | 只看该作者
dos时代菜鸟 发表于 2014-3-23 21:02
何为:相同类型的文件夹

要搜索 各类文件 ,你直接把  jpg 换成 * 就可以了 。这个脚本 功能 不只是 ...

不好意思,刚开始看到JPG的把我弄懵了,刚才试了一下,真不错,哈哈,谢谢老大,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-25 07:59

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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