【问题】
在假期中学习使用批处理对win2k os的安装光碟内的文件数据信息进行收集。
其中在下面的批处理代码中,有进行数据文件按字段进行匹配操作代码段(:MATCH标签)内。
因为数据文件比较大,在操作的过程中,完整的一个收集操作要进行1个多小时,因此希望对数据文件中已经匹配的数据列进行删除,从而加快收集的操作。(代码段就是match代码段内注释出来的部分)。
结果是:操作过程的时间没有明显的减少,但却出现匹配不正常的问题,表现就是应该正常匹配的数据列没有正常匹配与输出。
希望有经验的朋友指出语句中导致匹配出错的原因,与改进的方法。谢谢!!
附件中:请把match_error.txt改为match_error.rar后解压。
fi21.bat 为下面代码。在命令行中以 fi21.bat cadv 运行匹配操作。
cadvfi21.csv,cadvfi22.csv是两个供匹配测试用的数据文件。
cadvfi25.log是进行匹配操作用的基础文件。
cadvfi23.csv是未采用match段内注释语句的匹配结果。(正常)
cadvfi231.csv是采用了match段内注释语句的匹配结果。(不正常)- REM Copy the compressed files from X: to temp
- REM Expand the compressed files and Gather the expanded files infomation and relationship.
- REM 使用fi25.log(expanding)信息进行抽取fi21.csv,fi22.csv内容。
- REM Date:[2008-10-05 17:19:09] Author:nh_wzg
- ::File notes...
- ::fi21.md5:CD/ISO内文件在临时目录下压缩文件的MD5
- ::fi21.csv:CD/ISO内文件在临时目录下压缩文件的MD5、目录、路径、文件名、后缀等文件信息
- ::tfi21.csv:fi21.csv用于匹配操作用的中间文件
- ::fi22.md5:CD/ISO内文件在临时目录下压缩文件解压后的MD5
- ::fi22.csv:CD/ISO内文件在临时目录下压缩文件解压后的MD5、目录、路径、文件名、后缀等文件信息
- ::tfi22.csv:fi22.csv用于匹配操作用的中间文件
- ::fi23.csv:CD/ISO内文件在临时目录下压缩文件与解压文件相匹配后的MD5、目录、路径、文件名输出
- ::fi21.log:CD/ISO内文件在临时目录下压缩文件在被拷贝与删除时的信息记录
- ::fi22.log:CD/ISO内文件在临时目录下压缩文件解压时的信息记录
- ::fi23.log:CD/ISO内文件在临时目录下压缩文件(expanded)
- ::fi24.log:CD/ISO内文件在临时目录下压缩文件(copied)
- ::fi25.log:CD/ISO内文件在临时目录下压缩文件(expanding)
- ::fi26.log:CD/ISO内文件在临时目录下压缩文件(expanded与expanding进行文件名称匹配后的结果)
- ::dbid(0),md52(a),fullpath_filename(b),path(c),name(d),name2(e),ext2(f),size2(g),ts2(h),desc(i),tu(j),tc(k),
- ::,%%i(a),%%~fnxa(b),%%~dpa(c),%%~nxa(d),%%~na(e),%%~xa(f),%%~za(g),%%~ta(h),(i),(j),(k),>>fi_21.csv
- ::,%%i(p),%%~fnxa(q),%%~dpa(r),%%~nxa(s),%%~na(t),%%~xa(u),%%~za(v),%%~ta(w),(x),(y),(z),>>fi_22.csv
- :BEGIN
- @echo off
- cls&echo.
- Title [获取Windows 2k %1 CD压缩文件与解压后文件信息与对应关系]
- echo [获取Windows 2k %1 CD压缩文件与解压后文件信息与对应关系]
- echo.
- :INIT
- echo [批处理执行初始化(Batch Initializing ... )]
- echo.
- if "%2"=="b1" (goto normal1) else (goto init1)
- :INIT1
- set /a count=1
- :LOOP1
- if /i exist %cd%\temp (
- rd /s /q %cd%\temp 2>nul
- set /a count=count+1
- )
- if /i not exist %cd%\temp goto normal1
- if %count% lss 10 goto loop1
- if /i exist %cd%\temp (goto e1) else (goto normal1)
- :E1
- echo Initializing Failed ... %cd%\temp ... %count% &echo.
- goto end
- :NORMAL1
- goto match
- if exist %1fi21.md5 del/q %1fi21.md5
- if exist %1fi21.csv del/q %1fi21.csv
- if exist %1fi22.md5 del/q %1fi22.md5
- if exist %1fi22.csv del/q %1fi22.csv
- if exist %1fi23.csv del/q %1fi23.csv
- if exist %1fi21.log del/q %1fi21.log
- if exist %1fi22.log del/q %1fi22.log
- if exist %1fi23.log del/q %1fi23.log
- if exist %1fi24.log del/q %1fi24.log
- if exist %1fi25.log del/q %1fi25.log
- if exist %1tfi21.csv del/q %1tfi21.csv
- if exist %1tfi22.csv del/q %1tfi22.csv
- :COPYING
- set /p =[Copying the Compressed Files with Directories from CD ... <nul
- echo Copying the Compressed Files from CD.>%1fi21.log
- echo Date:%date% %time%>>%1fi21.log
- xcopy x:\*.*_ %cd%\temp\ /s /y |findstr "File(s)" >>%1fi21.log
- set /p =Done!]<nul
- echo.
- echo.
- :EXPANDING
- set /p =[Expanding the Compressed files ... <nul
- echo CD/ISO内文件在临时目录下压缩文件解压时的信息记录>%1fi22.log
- echo Date:%date% %time%>>%1fi22.log
- for /r %cd%\temp\ %%a in (*.*_) do expand -r %%a >>%1fi22.log
- set /p =Done!]<nul
- echo.
- echo.
- :MD51
- echo [Calculating the Compressed Files MD5 ... ]
- echo.
- fsum %cd%\TEMP\*.*_ %1fi21.md5 /r /i:dthure /o
- echo.
- echo [Calculating files MD5 Done!]
- echo.
- :CSV1
- set /p =[Gathering the Compressed files info CSV ... <nul
- echo dbid,md51,fullpath_filename,path,filename,name1,ext1,size1,ts1,desc,tu,tc,>%1fi21.csv
- for /f "skip=9 tokens=1* delims=* " %%i in (%1fi21.md5) do (
- for /f "delims=" %%a in ("%cd%\temp\%%j") do (
- echo ,%%i,%%~fnxa,%%~dpa,%%~nxa,%%~na,%%~xa,%%~za,%%~ta,,,,>>%1fi21.csv
- )
- )
- set /p =Done!]<nul
- echo.
- echo.
- :CLEAN
- set /p =[Deleting the Compressed files ... <nul
- echo CD/ISO内文件在临时目录下压缩文件在被删除时的信息记录>>%1fi21.log
- echo Date:%date% %time%>>%1fi21.log
- del /q /f /s *.*_ >>%1fi21.log
- set /p =Done!]<nul
- echo.
- echo.
- :MD52
- echo [Calculating the Expanded Files MD5 ... ]
- echo.
- fsum %CD%\TEMP\ %1fi22.md5 /r /i:dthure /o
- echo.
- echo [Calculating the Expanded Files MD5 Done!]
- echo.
- :CSV2
- set /p =[Gathering the Expanded Files info CSV ... <nul
- echo dbid,md52,fullpath_filename,path,name,name2,ext2,size2,ts2,desc,tu,tc,>%1fi22.csv
- for /f "skip=9 tokens=1* delims=* " %%i in (%1fi22.md5) do (
- for /f "delims=" %%a in ("%cd%\temp\%%j") do (
- echo ,%%i,%%~fnxa,%%~dpa,%%~nxa,%%~na,%%~xa,%%~za,%%~ta,,,,>>%1fi22.csv
- )
- )
- set /p =Done!]<nul
- echo.
- echo.
- :INIT2
- set /p =[生成含有expanded文件数目记录 ... <nul
- echo CD/ISO内文件在临时目录下压缩文件(expanded)>%1fi23.log
- echo Date:%date% %time%>>%1fi23.log
- findstr /i "expanded" %1fi22.log >>%1fi23.log
- set /p =Done!]<nul
- echo.
- echo.
- set /p =[生成含有copied文件数目记录 ... <nul
- echo CD/ISO内文件在临时目录下压缩文件(copied)>%1fi24.log
- echo Date:%date% %time%>>%1fi24.log
- findstr /i "copied" %1fi22.log >>%1fi24.log
- set /p =Done!]<nul
- echo.
- echo.
- set /p =[生成含有expanding文件数目记录 ... <nul
- echo CD/ISO内文件在临时目录下压缩文件(expanding)>%1fi25.log
- echo Date:%date% %time%>>%1fi25.log
- findstr /i "expanding" %1fi22.log >>%1fi25.log
- set /p =Done!]<nul
- echo.
- echo.
- :MATCH
- set /p =[匹配压缩文件与解压文件信息的对应关系并输出 ... <nul
- copy /y %1fi21.csv %1tfi21.csv >nul
- copy /y %1fi22.csv %1tfi22.csv >nul
- echo md51,fullpath_filename,path,fullname1,fullname2,md52,name2,ext2,size2,ts2,tu,tc,>%1fi23.csv
- setlocal enabledelayedexpansion
- for /f "skip=2 tokens=2,4 delims= " %%l in (%1fi25.log) do (
- set v1=%%l
- set v2=%%m
- for /f "skip=1 tokens=1-11 delims=," %%a in (%1tfi21.csv) do (
- if /i %%l==%%b (
- set aa=%%a
- set bb=%%b
- set cc=%%c
- set dd=%%d
- REM ----------------------------------------------------------------------
- REM findstr /i /v /c:%%b, %1tfi21.csv >t21.csv
- REM move /y t21.csv %1tfi21.csv
- REM ----------------------------------------------------------------------
- )
- )
- set v3=!v2:~0,-1!
- for /f "skip=1 tokens=1-11 delims=," %%p in (%1tfi22.csv) do (
- if /i !v3!==%%q (
- set ss=%%s
- set pp=%%p
- set tt=%%t
- set uu=%%u
- set vv=%%v
- set ww=%%w
- set yy=%%y
- set zz=%%z
- REM ----------------------------------------------------------------------
- REM findstr /i /v /c:%%q, %1tfi22.csv >t22.csv
- REM move /y t22.csv %1tfi22.csv
- REM ----------------------------------------------------------------------
- )
- )
- echo !aa!,!bb!,!cc!,!dd!,!ss!,!pp!,!tt!,!uu!,!vv!,!ww!,!yy!,!zz!,>>%1fi23.csv
- set aa=
- set bb=
- set cc=
- set dd=
- set ss=
- set pp=
- set tt=
- set uu=
- set vv=
- set ww=
- set yy=
- set zz=
- )
- endlocal
- set /p =Done!]<nul
- echo.
- echo.
- :END
- pause::[Press Any Key to Exit ... ]&echo.
复制代码
[ 本帖最后由 nh_wzg 于 2008-10-13 14:38 编辑 ] |