Board logo

标题: 研究:批处理分析提取指定目录的更新文件 [打印本页]

作者: qasa     时间: 2007-1-13 16:39    标题: 研究:批处理分析提取指定目录的更新文件

用批处理分析指定目录里的更新文件。

例如:e:\game\热血传奇;d:\劲舞团;d:\热血江湖......等
运行第一次批处理的时候,根据配置文件(config.ini)在D、E盘中,查找要更新的目录
config.ini
热血江湖
热血传奇

需要更新什么目录就输入什么。
new.ini  收集指定目录里更新前文件大小、时间
old.ini    收集指定目录里更新后文件大小、时间
比较 new.ini old.ini ,之后把文件大小或时间不同的文件复制到 d:\更新\热血江湖;d:\更新\热血传奇。
复制后重新收一份指定目录的最新文件大小、时间,保存到new.ini,以便下一次的对比。
作者: qasa     时间: 2007-1-13 18:38
生成new.ini个关键,以便后来的old.ini能和它进行比较
作者: everest79     时间: 2007-1-13 23:28
这样行不行
UPDATE.CMD
@ECHO OFF
SET SP=\\Server\NetGame\
SET CP=D:\NetGame\
SET LOG=\\Server\LOG\
IF [%1] == [] GOTO :EOF
IF [%2] == [] (
SET ST=start.lnk) ELSE (
IF EXIST "%CP%%~1\%~2.EXE" (
SET ST=%~2.EXE) ELSE (
SET ST=start.lnk)
)
IF NOT EXIST "%CP%%~1\" GOTO :EOF
XCOPY /D /Y %SP%%~1\UP.TXT %CP%%~1\|FIND " 0 ">NUL&&"%CP%%~1\%ST%"&&GOTO :EOF
XCOPY /E /H /R /K /X /D /Y /Q /C /G %SP%%~1\ %CP%%~1\ 2>"%LOG%%COMPUTERNAME%%~1.TXT"
"%CP%%~1\%ST%"
EXIT
UPDATD.CMD "魔兽世界" "launcher"
作者: qasa     时间: 2007-1-14 06:43
谢谢everest79兄,这样并没达到上面的要求。能再改进些吗?
作者: qasa     时间: 2007-1-14 14:25
请高手来帮帮忙呀~~~~~~~~~~~~~~~
作者: everest79     时间: 2007-1-15 08:16
你是想生成一个类似于windows文件系统快照的ini文件来进行更新对比吗?
作者: qasa     时间: 2007-1-15 13:42
恩恩,再帮我想下喽。。。。。
namejm兄那去了,还不来帮帮我。。。。:(
作者: everest79     时间: 2007-1-15 16:19
UPDATE2.0.CMD
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET SP=\\Server\UPDATE$\
SET SPC=%SP%CACHE\
SET CP=%ProgramFiles%\UPDATE\
SET CPC=%CP%CACHE\
SET SGP=\\Server\NetGame$\
SET CGP=D:\NetGame\
SET SCAN=%CGP%
SET UPH=%SCAN%%~1\%~1.ini

IF [%~1] == [-s] (
SET GO=CALL :SC
IF NOT [%~2] == [] (
SET TO=AN %~2
SET SCAN=%SGP%
SET UPH=F:\UPDATE\CACHE\%~2.ini
) ELSE SET GO=
)
%GO%%TO%
IF [%1] == [] (
GOTO :EOF) ELSE (
IF [%2] == [] (
GOTO :EOF) ELSE (
IF [%3] == [] (
GOTO :EOF)
)
)
IF NOT EXIST "%CGP%%~1\" MD "%CGP%%~1\"
IF NOT EXIST "%SP%" GOTO :START
IF NOT EXIST "%CGP%%~1\%~1.ini" CALL :SCAN %1
XCOPY /H /R /K /X /Y /Q /C /G "%SPC%*" "%CPC%">nul
IF EXIST "%CPC%%~nx0" CALL :NEW %0 %1 %2 %3
FOR /F "tokens=*" %%a IN ("%CPC%%~1.ini") DO (
FOR /F "tokens=*" %%b IN ("%CGP%%~1\%~1.ini") DO (
IF NOT "%%~tza" == "%%~tzb" (
GOTO NEXT1) ELSE (
GOTO START)
)
)

:NEXT1
ECHO.>"%CP%update.dat"
FOR /F "tokens=1,2,3,*" %%i IN ('type "%CPC%%~1.ini"') DO (
FINDSTR /B /E /I /C:"%%i %%j %%k %%l" "%CGP%%~1\%~1.ini">nul||ECHO %%l>>"%CP%update.dat"
)

PUSHD %CGP%%~1
XCOPY /T /E /Y "%SGP%%~1"
FOR /F "tokens=*" %%i IN ('type "%CP%update.dat"') DO (
XCOPY /H /R /K /X /Y /Q /C /G /D "%SGP%%~1\%%i" "%%~dpi">nul
)
CALL :SCAN %1
IF /I NOT "%~2" == "DEL" GOTO :START

:NEXT2
FOR /F "tokens=1,2,3,*" %%i IN (%CGP%%~1\%~1.ini) DO (
FINDSTR /B /E /I /C:"%%i %%j %%k %%l" "%CPC%%~1.ini">nul||del /f /q %%~dpnxl
)
pause
GOTO :START

:SCAN
ECHO.>"%UPH%"
FOR /F "tokens=*" %%i IN ('DIR /B /S /A:-D "%SCAN%%~1"') DO (
SET FP=%%~ftzi
SET FP=!FP:%SCAN%%~1\=!
ECHO !FP!>>"%UPH%")
GOTO :EOF

:NEW
FC /L "%CPC%%~nx0" %1|find "*"||GOTO :EOF
ECHO @ECHO OFF>"%CP%temp.cmd"
ECHO COPY "%CPC%%~nx0" "%CP%" /Y>>"%CP%temp.cmd"
ECHO START /I "UPDATE" %~nx1 "%~2" "%~3" "%~4">>"%CP%temp.cmd"
ECHO DEL /F /Q "%CPC%%~nx0">>"%CP%temp.cmd"
ECHO DEL /F /Q "%CP%temp.cmd"^&EXIT>>"%CP%temp.cmd"
START /I /MIN "NEW" "%CP%temp.cmd"
EXIT

:START
START "UPDATE DONE.." "%CGP%%~1\%~3"
EXIT