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

xcopy的一例特殊用法:按修改时间筛选并统计文件

  有这样一个题目:(XP 系统)快速筛选 "D:\寒夜孤星" 目录下的文件,条件是修改于2010年3月15号以后的文件,要求包括系统或隐藏属性的目录及文件,最后统计符合条件的文件数目,所有结果输出到 C:\Hanyeguxing.txt 中。

  因为单纯使用 for 去匹配,受到系统或隐藏属性的限制,所以很容易我们会想到使用 dir 命令。但使用 dir 时也存在着不便,例如 dir 显示的时间是文件的创建时间,输出格式需要使用 for /f 再解析等等。那么有没有简单的方法来实现上述要求呢?有,我们使用 xcopy 命令。

  xcopy 是一个复制文件和目录,包括子目录的命令,我们如何让他不执行复制操作呢?

  使用 /l 参数:显示要复制的文件列表。当使用 /l 参数时,不仅会显示要复制的文件列表,更重要的是复制操作不执行。

  然后根据需要,我们配置其他参数:
/d[:mm-dd-yyyy] 只复制那些在指定日期或指定日期之后更改过的源文件。如果不包括 mm-dd-yyyy 值,xcopy 会复制比现有 Destination 文件新的所有 Source 文件。该命令行选项使您可以更新更改过的文件。
/s 复制非空的目录和子目录。如果省略 /s,xcopy 将在一个目录中工作。
/r 复制只读文件。
/h 复制具有隐藏和系统文件属性的文件。默认情况下,xcopy 不复制隐藏或系统文件。

  这样,我们就得到了代码:
  1. xcopy "D:\寒夜孤星" C: /d:03-15-2010/lsrh>C:\Hanyeguxing.txt
复制代码
说明:

1,为避免周期性复制或冗余错误,目标目录推荐使用非源目录所在分区下的。例如源目录为 "D:\寒夜孤星" ,则目标目录可以指定为 D: 分区以外的任何实际存在的目录。如果不清楚什么是周期性复制错误,请尽量不要省略目标目录。

2,如果要筛选 "D:\寒夜孤星" 下的 txt 文本文件,则可以写成:
  1. xcopy "D:\寒夜孤星\*.txt" C: /d:03-15-2010/lsrh>C:\Hanyeguxing.txt
复制代码
3,如果要只显示统计信息,而不显示符合条件的文件列表,则可以写成:
  1. xcopy "D:\寒夜孤星\*.txt" C: /d:03-15-2010/qlsrh>C:\Hanyeguxing.txt
复制代码
/q 禁止显示 xcopy 消息。


4,如果要只显示符合条件的文件列表,而不显示统计信息,则可以写成:
  1. xcopy "D:\寒夜孤星\*.txt" C: /d:03-15-2010/lsrh|findstr /b /i "D:\\">C:\Hanyeguxing.txt
复制代码
5,如果要提取这些文件的所在目录,则可以:
  1. @echo off
  2. (for /F "delims=" %%a in ('xcopy "D:\寒夜孤星\*.txt" C: /d:03-15-2010/lsrh') do if exist "%%a" if not defined "%%~dpa" set ""%%~dpa"=="&echo.%%dpa)>C:\Hanyeguxing.txt
复制代码
6,如果要使用文件列表执行其他操作如删除这些文件,则可以:
  1. @echo off
  2. for /F "delims=" %%a in ('xcopy "D:\寒夜孤星\*.txt" C: /d:03-15-2010/lsrh') do if exist "%%a" del /f /a /q "%%a"
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-30 00:16 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

可以加入过滤机制
  1. xcopy %path1%\*.* %path2% /d:%cptime% /exclude:blacklist.lst /s /v /f /g /h /r >>copylog.log
复制代码

TOP

返回列表