回复 9# Batcher
先点个赞!大神的代码果然精简,无比佩服。换个思路,先提取数量再进行循环,效果果然更不一样。
下面是我写的代码,是先提取循环参数,再进行提取文本,就显得比较繁锁了:- @echo off
- setlocal enabledelayedexpansion
-
- ::后台运行
- if "%1" == "h" goto showtime
- mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
-
- ::设置开始时间
- :showtime
- set t1=%time:~0,8% & echo 开始时间:!t1!>report.txt
- for /f "tokens=1-3 delims=:" %%r in ( 'echo !t1!' ) do (
- set /a h1=1%%r-100
- set /a m1=1%%s-100
- set /a s1=1%%t-100
- )
-
- ::每行生成单独文件
- :divide
- ::提取第一列的序号作为文件名并生成临时文件
- for /f "skip=1 tokens=1,* delims= " %%i in (data.txt) do (
- echo %%i %%j>>%%i.tmp
- set total=%%i
- )
- set n=1
-
- ::重新生成数据
- :reborn
- if %n% gtr !total! goto end
- ::提取最后一列的数据为变量
- for /f "tokens=8 delims= " %%1 in (%n%.tmp) do (
- set var=%%1
- )
- for /l %%a in (1 1 !var!) do (
- ::提取需要的列数据生成新文件
- for /f "tokens=2-7 delims= " %%I in (%n%.tmp) do (
- echo %%J %%K %%L %%M %%N %%O>>New.txt
- )
- )
- ::按实际一个空白模版需要的模数生成空白行
- for /l %%z in (1,1,10) do echo=>>New.txt
- set /a n+=1
- goto reborn
- :end
- del *.tmp
-
- ::设置结束时间
- set t2=%time:~0,8% & echo 结束时间:!t2!>>report.txt
- for /f "tokens=1-3 delims=:" %%R in ( 'echo !t2!' ) do (
- set /a h2=1%%R-100
- set /a m2=1%%S-100
- set /a s2=1%%T-100
- )
-
- ::计算时间差
- set /a t3=(%h2%*3600+%m2%*60+%s2%)-(%h1%*3600+%m1%*60+%s1%)
- set /a m3=%t3%/60 & set /a s3=%t3%%%60
- echo 总共用时:%m3%分%s3%秒>>report.txt
- echo 数据包制作完成~>>report.txt
- timeout /T 2 /nobreak
- msg * <report.txt
- exit
复制代码
|