|
|
发表于 2016-10-1 13:28:32
|
显示全部楼层
本帖最后由 aa77dd@163.com 于 2016-10-1 14:04 编辑
回复 22# winbat
我测试是所有文件都在同一目录
好吧 我知道楼主是一点批处理也不会了 只用在 截取号码段.txt 前加上目录 tmp\ 就行了
仍有疑问, 下载完整测试包
http://pan.baidu.com/s/1gfr1Kyv- @echo off & setlocal enabledelayedexpansion
- >result.txt cd.
- for /f "tokens=1,2 delims=-" %%a in (tmp\截取号码段.txt) do (
- set "a=%%a" & set "b=%%b" & set "name=!a:~0,4!"
- for /f tokens^=2delims^=: %%i in ('find /c /v "" "!name!.txt"') do set /a "lb=0, ub=%%i, sk=ub/2"
- call :PAfterLines "!name!.txt" "!a:~0,13!" 0
- call :writeTemp "!name!.txt" tmpfile new
- sort /r tmpfile /o tmpfile
- for /f tokens^=2delims^=: %%i in ('find /c /v "" tmpfile') do set /a "lb=0, ub=%%i, sk=ub/2"
- call :PAfterLines tmpfile "!b:~0,13!" -1
- call :writeTemp tmpfile result.txt
- )
- sort result.txt /o result.txt
- del tmpfile
- fc result.txt 期待结果.txt
- pause
- exit
- :writeTemp infile outfile new
- if "%3" neq "" >"%~2" cd.
- if !sk! equ 0 (copy "%~2" + "%~1" "%~2" & exit /b)
- >>"%~2" (for /f skip^=%sk% %%a in (%~s1) do echo;%%a)
- exit /b
- REM order = 0 升序 order = -1 反序
- :PAfterLines file str order
- if !sk! equ 0 exit /b
- for /f skip^=%sk% %%a in (%~1) do (
- if !lb! geq !ub! exit /b
- if "%%a" gtr "%~2" (
- set /a "ub=(~%3 & sk)|(%3 & ub), lb=(~%3 & lb)| (%3 & (sk+^!(lb-sk))), sk=(lb+ub)>>1"
- call :PAfterLines %~1 %~2 %3 & exit /b
- ) else if "%%a" equ "%~2" ( exit /b
- ) else (
- set /a "lb=(~%3 & (sk+^!(lb-sk)))|(%3 & lb), ub=(~%3 & ub)|(%3 & sk), sk=(lb+ub)>>1"
- call :PAfterLines %~1 %~2 %3 & exit /b
- )
- )
- exit /b
复制代码 |
评分
-
查看全部评分
|