标题: xcopy的一例特殊用法:按修改时间筛选并统计文件 [打印本页]
作者: hanyeguxing 时间: 2010-5-29 21:32 标题: 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 不复制隐藏或系统文件。
这样,我们就得到了代码:- xcopy "D:\寒夜孤星" C: /d:03-15-2010/lsrh>C:\Hanyeguxing.txt
复制代码
说明:
1,为避免周期性复制或冗余错误,目标目录推荐使用非源目录所在分区下的。例如源目录为 "D:\寒夜孤星" ,则目标目录可以指定为 D: 分区以外的任何实际存在的目录。如果不清楚什么是周期性复制错误,请尽量不要省略目标目录。
2,如果要筛选 "D:\寒夜孤星" 下的 txt 文本文件,则可以写成:- xcopy "D:\寒夜孤星\*.txt" C: /d:03-15-2010/lsrh>C:\Hanyeguxing.txt
复制代码
3,如果要只显示统计信息,而不显示符合条件的文件列表,则可以写成:- xcopy "D:\寒夜孤星\*.txt" C: /d:03-15-2010/qlsrh>C:\Hanyeguxing.txt
复制代码
/q 禁止显示 xcopy 消息。
4,如果要只显示符合条件的文件列表,而不显示统计信息,则可以写成:- xcopy "D:\寒夜孤星\*.txt" C: /d:03-15-2010/lsrh|findstr /b /i "D:\\">C:\Hanyeguxing.txt
复制代码
5,如果要提取这些文件的所在目录,则可以:- @echo off
- (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,如果要使用文件列表执行其他操作如删除这些文件,则可以:- @echo off
- 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 编辑 ]
作者: acoolbug 时间: 2010-8-25 16:37
可以加入过滤机制- xcopy %path1%\*.* %path2% /d:%cptime% /exclude:blacklist.lst /s /v /f /g /h /r >>copylog.log
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |