批处理命令教学之字符串排序(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)。
例如:
<
复制代码代码如下:
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>
结果:
和ip.txt⼀摸⼀样,因为ip.txt中的单词第⼀个字符顺序都是按“a-z”排列的。
2.利⽤sort,按单词的第⼆个字符顺序排列
同样对ip.txt进⾏处理。
代码:
复制代码代码如下:
C:\Users\HELLOW~1\Desktop>sort /+
效果:
复制代码代码如下:
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 /+。
3.倒序排列
既然可以123,⾃然可以321。sort命令也可以倒序排列并输出。
①.通常的倒序⽅法(按字母倒序)
代码:
复制代码代码如下:
sort /
效果:
复制代码代码如下:
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 /+
效果:
同第⼀种⽅法。
说明:
<中最长的单词是“refrigerator”,合计有12个字母,这⾥sort ⽐较第13个字母的⼤⼩,但是所有的单词都没有13个字母(最长的才12),此时按⽂本倒序排列。所以只要你将/+n中,n的值设置的⾜够⼤,此时按⽂本倒序输出。
由于开篇的ip.txt内容没设置好,导致按字母倒序和按⽂本倒序产⽣了相同的结果,事实上这是两种完全不同的排序⽅法。按字母倒序是根据字母规则(a-z,0-9)进⾏倒序排列,按⽂本倒序是将最后⼀⾏⽂本作为第⼀⾏,第⼀⾏作为最后⼀⾏(简⽽⾔之就是⽂本⾏颠倒)。
例⼦(由Crlf版主友情提供):
test.bat:
复制代码代码如下:
@echo off
sort /
echo;
sort命令排序
sort /+
pause
<:
复制代码代码如下:
123
abc
测试
@#¥
ABC
结果:
复制代码代码如下:
测试
abc
ABC
123
@#¥
ABC
@#¥
测试
abc
123
请按任意键继续. . .
4.将排序结果输出到⽂件
①.利⽤重定向符,将排序结果输出到⽂件
代码:
复制代码代码如下:
&
效果:
在当前⽂件夹中⽣成,内容为:
复制代码代码如下:
@#¥
123
abc
ABC
测试
②.利⽤sort的/o参数,将排序结果输出到⽂件
代码:
复制代码代码如下:
/
效果:
在当前⽂件夹中⽣成,内容同。
两者的差别:
根据微软的机器翻译“指定输出⽂件⽐将同⼀⽂件作为标准输出重定向速度快”,也就是说/o参数⽐重定向符(>)快,这个不好实际测试,有这么个映象就可以了。
5.对/m,/t参数的⼀些说明
/m参数是⽤来指定参与排序的内存,换句话说就是“你分多少内存(单位kb)给sort命令排序”。
/t参数是⽤来指定缓存⽂件的⽬录,举个例⼦来说,我要处理8m的⼤⽂本,指定内存为500kb,500kb怎么装得下8m的⽂件?这时怎么办呢?——(按1m=1000kb算)先将500kb装⼊内存,再将剩下的7500kb分15次装⼊内存,缓存⽂件放在/t指定的⽬录中。
例如:
<是⼀个8m的⽂本(要做测试的同学,可以到⽹上下本⼩说)。
代码:
复制代码代码如下:
&   /m 500 /t C:\dcache
说明:
<是⼀本⼩说,⽤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来加以说明。
<中⼀共含有2⾏⽂本,每⾏⽂本含有4097个字符。
复制代码代码如下: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 代码和结果:
复制代码代码如下:
C:\Users\helloworld\Desktop>
输⼊记录超过最⼤长度。请指定更⼤的最⼤限度。
C:\Users\helloworld\Desktop>sort /rec
正确回显。
没讲的内容,/l参数,这个是区域设置相关,我也没弄懂。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。