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