请选择 进入手机版 | 继续访问电脑版

算力论坛Suanli.io

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 545|回复: 1

批处理之字符串排序

[复制链接]

管理员

Rank: 9Rank: 9Rank: 9

帖子
760
算力
1619
注册时间
2018-4-4

算力100算个hash会员

发表于 2019-4-1 17:20:07 来自手机 | 显示全部楼层 |阅读模式
https://m.jb51.net/article/63212.htm


这篇文章主要介绍了批处理命令教学之字符串排序:sort的相关资料,需要的朋友可以参考下
帮助信息:
复制代码 代码如下:

SORT [/R] [/+n] [/M kilobytes] [/L locale] [/REC recordbytes]
  [[drive1:][path1]filename1] [/T [drive2:][path2]]
  [/O [drive3:][path3]filename3]
  /+n                         指定开始每个比较的字符号码 n。/+3 说明每个
                              比较应从每行的第三个字符开始。少于 n 个字符
                              的行排在其他行之前。按默认值,从每行的第一
                              个字符开始比较。
  /L[OCALE] locale            用指定的区域设置替代系统默认区域设置。
                              ""C"" 区域设置产生最快的排序顺序并且是当前
                              的唯一其他选择。排序总是不分大小写的。
  /M[EMORY] kilobytes         指定用于排序的主内存量,单位为 KB。
                              最小内存量总是 160 KB。如果指定内存大小,
                              无论主内存的可用量是多少,指定的内存量会
                              全部用于排序。
                              要取得最佳性能,通常不指定内存大小。按默认
                              值,如果达到默认最大内存值,排序会一次完成
                              (非临时文件);否则,排序会分两次完成(没有
                              完全排序的数据存储在临时文件中);用于排序
                              和合并的内存量相等。如果输入和输出都是文
                              件,默认最大内存量为可用主内存的 90%;
                              否则,为主内存的 45%。
  /REC[ORD_MAXIMUM] characters 指定记录中的最大字符数量
                              (默认值为 4096,最大值为 65535)。
  /R[EVERSE]                  颠倒排序顺序,即,从 Z 到 A,再从 9 到 0。
  [drive1:][path1]filename1   指定要排序的文件。如果没有指定,则排序标准
                              输入。指定输入文件比将同一个文件重定向为标
                              准输入快。
  /T[EMPORARY]
    [drive2:][path2]          指定保留排序工作存储的目录路径,以防主内
                              存无法容纳数据。默认值是使用系统临时目录。
  /O[UTPUT]
    [drive3:][path3]filename3 指定在哪个文件中储存经过排序的输入。
                              如果没有指定,数据会被写入标准输出。指定
                              输出文件比将标准输出重定向到同一个文件快。
命令概括:
sort,意为“以……排序”。
/r,全英文reverse,意为“颠倒”。
/+n,还是number,意为“数字”。
/m,全英文memory,意为“内存”。
/l,全英文locale,意为“场所”,引申为“区域设置”。
/rec,全英文record,意为“记录”。
/t,全英文temporary,意为“临时的”。
/o,全英文output,意为“输出”。
参数详解:
1.不带任何参数的sort命令
不带任何参数的sort命令,比较第一个字符的大小(字母不区分大小写),按“顺序排列”输出(a-z,0-9)。
例如:
ip.txt
复制代码 代码如下:

apple
believe
change
desktop
everything
flight
ground
hello
ignore
joke
knowledge
little
memory
normal
outside
Police
quickly
refrigerator
smell
technology
until
violin
water
xenophobia
yellow
zero
利用sort进行排序。
代码:
复制代码 代码如下:

C:\Users\HELLOW~1\Desktop>sort ip.txt
结果:
和ip.txt一摸一样,因为ip.txt中的单词第一个字符顺序都是按“a-z”排列的。
2.利用sort,按单词的第二个字符顺序排列
同样对ip.txt进行处理。
代码:
复制代码 代码如下:

C:\Users\HELLOW~1\Desktop>sort /+2 ip.txt
效果:
复制代码 代码如下:

water
technology
refrigerator
believe
hello
yellow
memory
xenophobia
zero
desktop
ignore
change
violin
little
flight
smell
knowledge
until
joke
Police
normal
apple
ground
quickly
outside
everything
这一次的排序是按照第二个字符的“顺序排列”(a-z)进行排列的。
结合1、2节不难看出,其实sort ip.txt 的效果等同于 sort /+1 ip.txt。
3.倒序排列
既然可以123,自然可以321。sort命令也可以倒序排列并输出。
①.通常的倒序方法(按字母倒序)
代码:
复制代码 代码如下:

sort /r ip.txt
效果:
复制代码 代码如下:

zero
yellow
xenophobia
water
violin
until
technology
smell
refrigerator
quickly
Police
outside
normal
memory
little
knowledge
joke
ignore
hello
ground
flight
everything
desktop
change
believe
apple
②.特殊的倒序方法(按文本倒序,由Crlf版主友情提供)
代码:
复制代码 代码如下:

sort /+13 ip.txt
效果:
同第一种方法。
说明:
ip.txt中最长的单词是“refrigerator”,合计有12个字母,这里sort 比较第13个字母的大小,但是所有的单词都没有13个字母(最长的才12),此时按文本倒序排列。
所以只要你将/+n中,n的值设置的足够大,此时按文本倒序输出。
由于开篇的ip.txt内容没设置好,导致按字母倒序和按文本倒序产生了相同的结果,事实上这是两种完全不同的排序方法。按字母倒序是根据字母规则(a-z,0-9)进行倒序排列,按文本倒序是将最后一行文本作为第一行,第一行作为最后一行(简而言之就是文本行颠倒)。
例子(由Crlf版主友情提供):
test.bat:
复制代码 代码如下:

@echo off
sort /r ip.txt
echo;
sort /+1000 ip.txt
pause
ip.txt:
复制代码 代码如下:

123
abc
测试
@#¥
ABC
结果:
复制代码 代码如下:

测试
abc
ABC
123
@#¥
ABC
@#¥
测试
abc
123
请按任意键继续. . .
4.将排序结果输出到文件
①.利用重定向符,将排序结果输出到文件
代码:
复制代码 代码如下:

sort ip.txt>hello1.txt
效果:
在当前文件夹中生成hello1.txt,内容为:
复制代码 代码如下:

@#¥
123
abc
ABC
测试
②.利用sort的/o参数,将排序结果输出到文件
代码:
复制代码 代码如下:

sort ip.txt /o hello2.txt
效果:
在当前文件夹中生成hello2.txt,内容同hello1.txt。
两者的差别:
根据微软的机器翻译“指定输出文件比将同一文件作为标准输出重定向速度快”,也就是说/o参数比重定向符(>)快,这个不好实际测试,有这么个映象就可以了。
5.对/m,/t参数的一些说明
/m参数是用来指定参与排序的内存,换句话说就是“你分多少内存(单位kb)给sort命令排序”。
/t参数是用来指定缓存文件的目录,举个例子来说,我要处理8m的大文本,指定内存为500kb,500kb怎么装得下8m的文件?这时怎么办呢?——(按1m=1000kb算)先将500kb装入内存,再将剩下的7500kb分15次装入内存,缓存文件放在/t指定的目录中。
例如:
16.txt是一个8m的文本(要做测试的同学,可以到网上下本小说)。
代码:
复制代码 代码如下:

>22.txt sort 16.txt  /m 500 /t C:\dcache
说明:
16.txt是一本小说,用sort排序之后自然是“惨不忍睹”的,对于结果没有什么好说的,主要说说这行代码运行后产生的一些问题。
问题1.运行代码后,提出警告信息“警告: 做大量排序时使用重定向输出通常比直接指定输出文件名称来排序慢。”——这个前面说过了“/o参数比重定向符(>)快”。
问题2.运行代码后,在目录C:\dcache中产生了一个以“srt”+16进制随机数命名的.tmp文件,出现过几秒,后被系统删除(没用/t参数指定的目录时,默认缓存文件目录是%temp%)。
问题3.当我将/m指定的内存数500kb变为160kb(160kb是sort命令默认的最小内存)时,竟然提示“没有足够的内存,无法完成排序。”
由问题引出的简单思考:
既然是简单思考,自然不会分析的太过深入。
问题1.如果说/o比重定向符(>)快,而且有时用重定向符(>)还会出现“警告”,那么完全可以舍弃重定向符(>),只要想输出排序结果就用/o参数。
问题2.缓存文件产生的原因是指定了内存的大小,不指定就不会出现,也就是说“不用/m参数就不会出现缓存文件,而不用/m参数,/t参数也没用”。
问题3.不指定用于排序的内存大小,就不会提示“内存不足”,那么不用/m参数不就好了。
总结:sort的/m,/t参数完全可以不用。估计这两个参数,是为了dos时代而准备的,现在的电脑内存——我这台“老爷机”都有1G的内存,实在想不出为了区区几十M的文件分配内存有什么意义。
6./rec参数(指定sort能处理的最大行)
这里的“最大行”,不是说文本中有多少行,而是说一行中最多可以含有多少字符数。
sort命令默认的文本最大行含有4096个字符(2的12次幂),最多可以含有65535个字符。
这里设置了一个特殊的文本a.txt来加以说明。
a.txt中一共含有2行文本,每行文本含有4097个字符。
复制代码 代码如下:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
代码和结果:
复制代码 代码如下:

C:\Users\helloworld\Desktop>sort a.txt
输入记录超过最大长度。请指定更大的最大限度。
C:\Users\helloworld\Desktop>sort /rec 4097 a.txt
正确回显。
没讲的内容,/l参数,这个是区域设置相关,我也没弄懂。

管理员

Rank: 9Rank: 9Rank: 9

帖子
760
算力
1619
注册时间
2018-4-4

算力100算个hash会员

 楼主| 发表于 2019-4-1 17:26:24 | 显示全部楼层
用补零的方法,感觉快些.
::
  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
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Suanli.io

GMT+8, 2019-4-22 00:04

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表