Board logo

标题: [文本处理] 批处理怎样记录每次copy了哪些文件并输出到日志? [打印本页]

作者: sybwyn    时间: 2010-12-8 15:56     标题: 批处理怎样记录每次copy了哪些文件并输出到日志?

想记录每次copy了哪些文件,日志的填写有点问题,头大,想请高人看看

xcopy 服务器路径 本机路径  >> C:\update_log.txt

两种情况:
1、服务端文件全部更新到本机,日志显示:恭喜你,本机已经在“年-月-日 星期X 点-分-秒”更新了所有文件

2、如果有程序占用了部分文件而无法更新覆盖,日志显示:有以下文件因被本地程序占用未成功更新,列出文件名

达人给点指导,谢谢!

[ 本帖最后由 sybwyn 于 2010-12-8 16:00 编辑 ]
作者: hanyeguxing    时间: 2010-12-8 22:34

按照楼主的目的,必须对xcopy使用/c参数!否则复制会被 %ERRORLEVEL%=4 共享侵犯错误终止。
而使用了 /c 参数后,xcopy 不会返回错误,所以只能从2句柄中读取,而该句柄仅显示错误类型,不显示具体哪个文件出错,所以同时输出1句柄(因为/q是禁止1句柄的,所以不能用),然后对 错误.log 进行解析。
当然还有方法二,就是以1句柄输出的文件列表为参照,比较目标文件的时间以判断是否被修改。
  1. @echo off&setlocal enabledelayedexpansion
  2. set "xing=C:\update_log.txt"
  3. echo a|xcopy "\\服务器路径" "C:\本机路径" /cfskrh>han.ye 2>&1
  4. for /f "tokens=1* delims=>" %%a in (han.ye) do call:han "%%a" "%%b"
  5. if "%gu%"=="" >>%xing% echo 恭喜你,本机已经在“%date% %time%”更新了所有文件
  6. del /q han.ye
  7. exit
  8. :han
  9. set han=%~1
  10. if "%han:~0,3%"=="改写 " goto:ye
  11. if "%han:~0,3%"=="复制了" goto:ye
  12. (if "%han:~0,3%"=="共享侵" (
  13.     if "!gu!"=="" echo 有以下文件因被本地程序占用未成功更新(%date% %time%):
  14.     echo !ye:~1!
  15.     set gu==
  16. ))>>%xing%
  17. :ye
  18. set ye=%~2
复制代码

[ 本帖最后由 hanyeguxing 于 2010-12-8 23:17 编辑 ]
作者: sybwyn    时间: 2010-12-8 23:27

真是太太鸡冻了!等了盼了一天了,终于等到了高人的回复,真是不知如何感谢你,过来请你吃大餐吧!




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2