[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
对于findstr的表达式一直是晕晕的,对sort的用法也一直是晕晕的,
既然说sort可以对相同位数的数进行排序,且可以处理超大数,
那么用补零的办法似乎也可以,那样就可以不用findstr命令.
namejm 说的效率低,不知是因为用了findstr的原因么?
而且我用你的代码处理一个超大数时,222222222222222222222222222222222 findstr居然报错!!
不知道是我的findstr命令有问题,还是本就如此.
用补零的方法,感觉快些.
::
  1. @echo off&setlocal enabledelayedexpansion
  2. if not "%1"==":" (
  3.   for /f %%a in ('"%~0" :^|sort') do (
  4.   for /f "tokens=1,2 delims=0" %%b in ("%%a") do (
  5.   set num=%%b
  6.   if "%%b"=="a" (echo 0) else echo !num:~0,-1!
  7.   ))
  8.   pause&exit
  9. )
  10. :: 统计数字串的最大长度
  11. set max=100
  12. for /f %%i in (a.txt) do (
  13.   set length=100
  14.   call :CheckLength %%i
  15.   if !length! geq !max! set max=!length!
  16.   )
  17.   for /l %%a in (1 1 %max%) do set num=0!num!
  18.   for /f %%i in (a.txt) do (
  19.   set var=!num!%%i
  20.   call echo %%var:~-!max!%%a
  21. )
  22. goto :eof
  23. :CheckLength
  24.   set str=%1
  25.   if "%str:~100,1%"=="" (goto :eof) else set str=!str:~100!
  26. :loop
  27.   set /a length+=1
  28.   set str=!str:~1!
  29.   if defined str goto loop
  30. goto :eof
复制代码

[ 本帖最后由 随风 于 2007-11-9 20:11 编辑 ]
1

评分人数

技术问题请到论坛发帖求助!

TOP

if not "%1"==":" (
  for /f %%a in ('"%~0" :^|sort') do (
意识是,当%1不等于:冒号的时候,就运行这句,也就是第一次运行的时候,因为%1是空,也就是不等于:冒号,  %~0代表自身 后面的:是给它的参数,就是再次运行自身,并给%1赋值为:冒号.当%1等于冒号时就运行下面的语句.运行完后,返回到%~0处,再把结果交给sort排序,最后输出..
技术问题请到论坛发帖求助!

TOP

返回列表