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

[文件操作] 【已解决】批处理如何实现特定文件名文件的复制和归档?

[复制链接]
发表于 2015-2-28 00:10:12 | 显示全部楼层 |阅读模式
本帖最后由 gxx2002 于 2015-3-2 16:48 编辑

问题:我在文本文档中有一个文件名列表,想要从一个文件夹(其中包含了所需文件以及多余的文件)中根据列表提取出这些文件。有没有软件可以做到以上要求的批量搜索?由于文件名数上百,不可能用windows自带搜索来搜,也不能用文件名加逗号“,”法(因为列表实在太长,难以一个一个写逗号)。

解答:这种情况用批处理简单些,假定你的那个文件名列表是file.txt,你的文件夹是d盘的sample,要把这个file.txt中有的在sample下存在的的文件复制到d盘的new文件夹,打开记事本贴入以下内容:
  1. @for /f %%i in (file.txt) do if exist "d:\sample\%%i"  copy "d:\sample\%%i"  d:\new
复制代码
保存为bat文件(也就是文件类型选择所有文件,文件名随便填比如ss.bat)
  把这个ss.bat跟你的file.txt放在一个目录下,双击运行这个bat就行了。

需要改进的地方:对于这个公式,还需要3个功能:
1. 需要搜索的文件夹中,包含子文件夹;有些子文件夹在目前额命令中是不支持的。
2. 在上面的“file.TXT”文件中,如果输入的是部分文件名(如文件名中间的几个字符),那么就搜索不到了。
3. 还需要一个功能,能否限定只在某个修改日期段范围内的文件搜索?超出这个日期段的,就不搜了

如何改进?

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-2-28 01:30:33 | 显示全部楼层
  1. @for /f %%i in ('dir /s /a-d /b^|findstr /l /g:file.txt') do (
  2.    if %%~ta gtr 2015/01/01 if %%~ta lss 2015/02/01  copy "d:\sample\%%i"  d:\new
  3. )
复制代码
 楼主| 发表于 2015-2-28 09:31:52 | 显示全部楼层
回复 2# CrLf


    大神,我修改了一下,还是不行!
    大神是否有QQ,能否帮忙?!

  感激不尽!
 楼主| 发表于 2015-2-28 09:47:15 | 显示全部楼层
回复 2# CrLf


    实际处理结果还是不行,我用的是win7的,不知道是系统问题,还是我修改的不对,烦请大神帮忙!
 楼主| 发表于 2015-2-28 10:05:30 | 显示全部楼层
另外,如果子目录下还有子目录,这个程序能否支持?
 楼主| 发表于 2015-2-28 10:25:54 | 显示全部楼层
我把我需要做的东西放到附件中了,烦请大神帮忙!
发表于 2015-2-28 12:08:56 | 显示全部楼层
回复 1# gxx2002
假设file.txt为列出需复制的文件列表的文本文档,那么里面的内容格式是怎样的?
 楼主| 发表于 2015-2-28 13:42:30 | 显示全部楼层
回复 7# pcl_test

file.txt文件中的内容:仅仅是文件名的部分,但是是多个部分的集合。
比如,里面把人的姓氏写上,后面待处理文件里面,文件名是以人的全名来命名。只要把姓名中含有这个姓氏的文件提出来归档就好。
 楼主| 发表于 2015-2-28 13:45:08 | 显示全部楼层
回复 7# pcl_test


    你可以下载我刚才发的RAR文件,里面就有实例,您能否帮忙操作?
   真的非常感谢!
发表于 2015-2-28 13:52:56 | 显示全部楼层
本帖最后由 pcl_test 于 2015-2-28 14:02 编辑

回复 9# gxx2002
限定只在某个修改日期段范围内的文件搜索?提供以下三种种方式,请选择
1、筛选出修改日期为N天前至当前日期以内的文件
2、筛选出修改日期为N天前的文件
3、输入修改日期1和修改日期2,筛选出修改日期1和修改日期2之间的文件
 楼主| 发表于 2015-2-28 13:59:48 | 显示全部楼层
回复 10# pcl_test


    可以采用输入日期的方式,这样更好,更灵活!
 楼主| 发表于 2015-2-28 14:00:21 | 显示全部楼层
回复 10# pcl_test


    大神有没有QQ?非常希望可以向你请教!
发表于 2015-2-28 14:20:17 | 显示全部楼层
本帖最后由 bailong360 于 2015-2-28 15:02 编辑
  1. @Echo Off
  2. Set /P Min=Min(YYYYMMDD):&Set /P Max=Max(YYYYMMDD):
  3. For /F "Delims=" %%i In (文件名.txt) Do >nul Robocopy .\原文件夹 .\目标文件夹 *%%i*.* /S /MaxLad:%Min% /MinLad:%Max%
  4. Set/P=完成!
复制代码
这样是否符合要求?
已修正,刚把max和min填反了
Win 8.1 32位
Min:20140101
Max:20160110
测试通过
 楼主| 发表于 2015-2-28 14:59:11 | 显示全部楼层
回复 13# bailong360


    我试了,不行!没有一个文件被拷贝出来。
   我的文件名.TXT内不是存的全名或者路径+全名,而是全名的一个部分。

  您看能否帮忙下载一下我上传的文件?直接在里面编辑?多谢!
发表于 2015-2-28 15:08:34 | 显示全部楼层
回复 11# gxx2002
批处理跟file.txt放在一起运行
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::设定要搜索的目录
  4. set "fdir1=D:\test"
  5. ::设定目标文件夹
  6. set "fdir2=D:\new"
  7. ::设定修改日期1(yyyymmdd)
  8. set date1=20150102
  9. ::设定修改日期2(yyyymmdd)
  10. set date2=20150225
  11. ::日期1要早于日期2
  12. if %date1% geq %date2% echo 日期1要早于日期2,请重新设定 & pause & exit
  13. for /f "delims=" %%a in ('type "file.txt"') do (
  14. if not exist "%fdir2%%%a" md "%fdir2%%%a"
  15. for /f "delims=" %%b in ('dir /a-d /s /b "%fdir1%" ^|findstr /c:"%%a"') do (
  16. for /f "tokens=1*" %%c in ('dir /tw "%%b" ^|findstr ":"') do (
  17. set "wdate=%%c"
  18. set "wdate=!wdate:~0,4!!wdate:~5,2!!wdate:~8,2!"
  19. if !wdate! geq %date1% if !wdate! leq %date2% (
  20. echo "%%b"
  21. copy "%%b" "%fdir2%%%a" /y)
  22. )
  23. )
  24. )
  25. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 16:37 , Processed in 0.024151 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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