批處理ASCII字符比較大小實際次序表
在批處理中進行 ASCII 字符串大小比較, 本來想當(dāng)然的以為其大小依據(jù)是 ASCII 字符碼值, 可事實并非如此.
以下是一個 ASCII 可見字符(碼值從 32 到 126) 共 95 個字符 在批處理字符串比較中的實際次序表, 編號從 00 到 94, 編號越小, 字符也越小.
觀察此表, 總體次序 部分性地和 ASCII 次序相符. 有以下的幾個特點:
① 所有的 標點符號 在 數(shù)字字符 的前面; 所有的 數(shù)字字符 在 字母的前面;
② 數(shù)字字符中, 按對應(yīng)數(shù)字值大小排序;
③ 字母中, 不同的字母比較, 不論其大小寫, 而只以在字母表中的次序排大小;
④ 同一個字母, 小寫的小于大寫的.
⑤ 成對的 標點符號, 左邊的在前, 右邊的在后. 即: (小于), [小于], {小于}, <小于>
ASCII 可見字符(碼值從 32 到 126)批處理比較實際次序表
00:{ }
01:{'}
02:{-}
03:{!}
04:{"}
05:{#}
06:{$}
07:{%}
08:{&}
09:{(}
10:{)}
11:{*}
12:{,}
13:{.}
14:{/}
15:{:}
16:{;}
17:{?}
18:{@}
19:{[}
20:{\}
21:{]}
22:{^}
23:{_}
24:{`}
25:{{}
26:{|}
27:{}}
28:{~}
29:{+}
30:{<}
31:{=}
32:{>}
33:{0}
34:{1}
35:{2}
36:{3}
37:{4}
38:{5}
39:{6}
40:{7}
41:{8}
42:{9}
43:{a}
44:{A}
45:
46:{B}
47:{c}
48:{C}
49:vvxyksv9kd
50:{D}
51:{e}
52:{E}
53:{f}
54:{F}
55:{g}
56:{G}
57:{h}
58:{H}
59:{i}
60:{I}
61:{j}
62:{J}
63:{k}
64:{K}
65:{l}
66:{L}
67:{m}
68:{M}
69:{n}
70:{N}
71:{o}
72:{O}
73:{p}
74:{P}
75:{q}
76:{Q}
77:{r}
78:{R}
79:{s}
80:{S}
81:{t}
82:{T}
83:{u}
84:{U}
85:{v}
86:{V}
87:{w}
88:{W}
89:{x}
90:{X}
91:{y}
92:{Y}
93:{z}
94:{Z}
以下是生成此表的代碼, 首先生成不包含 半角感嘆號 ! 的 94 個字符的次序表, 然后根據(jù)幾個簡單比較得出 半角感嘆號 在表中的位置.
表生成代碼中, 字符排序采用選擇排序法. 字符串初始化中, 對特殊字符進行了轉(zhuǎn)義:
用前導(dǎo)上角號 ^ 轉(zhuǎn)義的有 8 個特殊字符: "&()<>^|
另外 百分號 %
用自身雙寫進行轉(zhuǎn)義.
生成除 半角感嘆號 ! 外 94 個字符次序表的代碼(代碼中開啟了 延遲的環(huán)境變量擴展, 簡化代碼起見, 故將 ! 單獨處理)
@echo off & setlocal enabledelayedexpansion & cls (set chrs=^"#$%%^&'^(^)*+,-./01234 56789:;^<=^>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^^_`abcdefghijklmnopqrstuvwxyz{^|}~) echo 這是一個由 ASCII 碼值 32--126 ^(除了半角感嘆號外^) 共 94 個字符組成的字符串: echo %chrs% set /p=按任意鍵查看對這 94 個字符進行初始編號...<nul&pause>nul&echo. for /l %%i in (0,1,93) do ( (set cc%%i=!chrs:~%%i,1!) set /a "ii=100+%%i" echo !ii:~1!:{!cc%%i!} ) set /p=按任意鍵查看對這 94 個字符進行排序后的次序表...<nul&pause>nul&echo. for /l %%i in (0,1,92) do ( set /a "min=%%i, n=%%i+1" (set minChr=!cc%%i!) for /l %%j in (!n!,1,93) do ( if "!cc%%j!" lss "!minChr!" ( (set min=%%j) (set minChr=!cc%%j!) ) ) for /f "tokens=1" %%m in ("!min!") do ( (set tt=!cc%%i!) (set cc%%i=!cc%%m!) (set cc%%m=!tt!) ) ) for /l %%i in (0,1,93) do ( set /a "ii=100+%%i" echo !ii:~1!:{!cc%%i!} ) set /p=按任意鍵查看插入半角感嘆號后, 95 個字符的全次序表...<nul&pause>nul&echo. for /l %%i in (93,-1,3) do ( set /a "jj=%%i+1" for /f "tokens=1" %%j in ("!jj!") do (set cc%%j=!cc%%i!) ) setlocal disabledelayedexpansion (set cc3=!) setlocal enabledelayedexpansion for /l %%i in (0,1,94) do ( set /a "ii=100+%%i" echo !ii:~1!:{!cc%%i!} ) pause exit /b
關(guān)閉延遲的環(huán)境變量擴展條件下 確定 半角感嘆號 ! 在表中的位置的代碼
if ! lss # (echo lll) else echo ggg
輸出 lll 表明 ! 小于 #
if ! lss - (echo lll) else echo ggg
輸出 ggg 表明 ! 大于 -
- 和 # 之間只剩下一個雙引號 " 感嘆號 ! 和雙引號 " 的大小關(guān)系又如何:
if ^! lss ^" (echo lll) else echo ggg
輸出 lll
if ^! gtr ^" (echo ggg) else echo lll
輸出 lll
if ^! equ ^" (echo ==) else echo ≠
輸出 ≠
以上表明 感嘆號 ! 是小于雙引號 " 的, 所以感嘆號在表中的編號應(yīng)是 03, 而雙引號及后面的所有字符編號全部加1.
到此這篇關(guān)于批處理ASCII字符比較大小實際次序表的文章就介紹到這了,更多相關(guān)ASCII字符比較大小內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
自制控制進程和控制開機啟動項批處理(ntsd強制結(jié)束版)
這篇文章主要介紹了自制控制進程和控制開機啟動項批處理,需要的朋友可以參考下2014-05-05批處理echo、echo off、echo on、@、@echo off
本文主要介紹了批處理echo、echo off、echo on、@、@echo off,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04Netsh 命令備份和恢復(fù)網(wǎng)絡(luò)設(shè)置
Netsh是Windows 2000/XP/2003操作系統(tǒng)自身提供的命令行腳本實用工具,它允許用戶在本地或遠程顯示或修改當(dāng)前正在運行的計算機的網(wǎng)絡(luò)配置。2009-06-06Windows下使用批處理實現(xiàn)啟動關(guān)閉mysql
這篇文章主要介紹了Windows下使用批處理實現(xiàn)啟動關(guān)閉mysql,其主要核心思想是將mysql注冊成為windows下的服務(wù),推薦給大家,有需要的下伙伴可以參考下,其實很多的php集成環(huán)境都是這么實現(xiàn)的。2015-03-03cmd環(huán)境變量命令set 設(shè)置永久環(huán)境變量命令setx
這篇文章主要介紹了cmd環(huán)境變量命令set 設(shè)置永久環(huán)境變量命令setx,需要的朋友可以參考下2020-08-08