Board logo

标题: [文本处理] 批处理如何修改全角为半角? [打印本页]

作者: youxi01    时间: 2007-11-9 20:12     标题: 批处理如何修改全角为半角?

如题:批处理如何修改全角为半角?

现需要把 ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
改成ABCDEFGHIJKLMNOP1RSTUVWXYZ1234567890

批处理如何实现?
作者: 随风    时间: 2007-11-9 20:36

::
  1. @echo off
  2. set var=ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
  3. setlocal enabledelayedexpansion
  4. set str=ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
  5. set num=ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
  6. for /l %%a in (0 1 35) do (
  7. call set ma=%%str:~%%a,1%%
  8. call set na=%%num:~%%a,1%%
  9. call set var=%%var:!ma!=!na!%%
  10. )
  11. echo !var!
  12. pause
复制代码

作者: youxi01    时间: 2007-11-9 20:56

通过纯批处理 如何 识别 全角 符号?
作者: somebody    时间: 2007-11-9 21:36

为何不将 setlocal enabledelayedexpansion 放到最前,那样就可以直接用 !!
youxi01 只是举个例子列出一些出来,实际上他是要任意全角改为半角..
普通人这种方法其实是实例化了..............youxi01 要的是通用的那种...

to youxi01:

           上次你判断是否大于Z来判断是汉字还是英文时,其实就是通过比较ASCII来判断的..只是Z的ASCII是90,那样不太准确
全角字符的ASCII 大于128或者小于0,或许你可以找出ASCII为0和ASCII 为128的字符,然后进行判断............
  1. Ascii 0 {Nulo, Sem Som}
  2. Ascii 1
  3. Ascii 2
  4. Ascii 3
  5. Ascii 4
  6. Ascii 5
  7. Ascii 6
  8. Ascii 7
  9. Ascii 8 {BackSpace}
  10. Ascii 9 {Tab}
  11. Ascii 10
  12. Ascii 11
  13. Ascii 12
  14. Ascii 13 {Enter}
  15. Ascii 14
  16. Ascii 15
  17. Ascii 16 {Shift}
  18. Ascii 17 {CTRL}
  19. Ascii 18 {ALT}
  20. Ascii 19
  21. Ascii 20 {CapsLock}
  22. Ascii 21
  23. Ascii 22
  24. Ascii 23
  25. Ascii 24
  26. Ascii 25
  27. Ascii 26
  28. Ascii 27
  29. Ascii 28
  30. Ascii 29
  31. - Ascii 30
  32. - Ascii 31
  33. Ascii 32 {Espaço}
  34. ! Ascii 33
  35. " Ascii 34
  36. # Ascii 35
  37. $ Ascii 36
  38. % Ascii 37
  39. & Ascii 38
  40. ' Ascii 39
  41. ( Ascii 40
  42. ) Ascii 41
  43. * Ascii 42
  44. + Ascii 43
  45. , Ascii 44
  46. - Ascii 45
  47. . Ascii 46
  48. / Ascii 47
  49. 0 Ascii 48
  50. 1 Ascii 49
  51. 2 Ascii 50
  52. 3 Ascii 51
  53. 4 Ascii 52
  54. 5 Ascii 53
  55. 6 Ascii 54
  56. 7 Ascii 55
  57. 8 Ascii 56
  58. 9 Ascii 57
  59. : Ascii 58
  60. ; Ascii 59
  61. < Ascii 60
  62. = Ascii 61
  63. > Ascii 62
  64. ? Ascii 63
  65. @ Ascii 64
  66. A Ascii 65
  67. B Ascii 66
  68. C Ascii 67
  69. D Ascii 68
  70. E Ascii 69
  71. F Ascii 70
  72. G Ascii 71
  73. H Ascii 72
  74. I Ascii 73
  75. J Ascii 74
  76. K Ascii 75
  77. L Ascii 76
  78. M Ascii 77
  79. N Ascii 78
  80. O Ascii 79
  81. P Ascii 80
  82. Q Ascii 81
  83. R Ascii 82
  84. S Ascii 83
  85. T Ascii 84
  86. U Ascii 85
  87. V Ascii 86
  88. W Ascii 87
  89. X Ascii 88
  90. Y Ascii 89
  91. Z Ascii 90
  92. [ Ascii 91
  93. \ Ascii 92
  94. ] Ascii 93
  95. ^ Ascii 94
  96. _ Ascii 95
  97. ` Ascii 96
  98. a Ascii 97
  99. b Ascii 98
  100. c Ascii 99
  101. d Ascii 100
  102. e Ascii 101
  103. f Ascii 102
  104. g Ascii 103
  105. h Ascii 104
  106. i Ascii 105
  107. j Ascii 106
  108. k Ascii 107
  109. l Ascii 108
  110. m Ascii 109
  111. n Ascii 110
  112. o Ascii 111
  113. p Ascii 112
  114. q Ascii 113
  115. r Ascii 114
  116. s Ascii 115
  117. t Ascii 116
  118. u Ascii 117
  119. v Ascii 118
  120. w Ascii 119
  121. x Ascii 120
  122. y Ascii 121
  123. z Ascii 122
  124. { Ascii 123
  125. | Ascii 124
  126. } Ascii 125
  127. ~ Ascii 126
  128.  Ascii 127
  129. ? Ascii 128
复制代码
b

[ 本帖最后由 somebody 于 2007-11-9 21:38 编辑 ]
作者: youxi01    时间: 2007-11-9 22:03

你不是把 批处理 当成了vbs吧?
还ascii码?或许批处理真有这样的事情?
作者: somebody    时间: 2007-11-9 23:10

那你拿字符跟字母Z比较,你说比较的是什么???
比较的不是字符的ASCII码你说是什么!!!!!!!!!!!!!!!!
还说。。。
http://bbs.bathome.net/viewthread.php?tid=2
if !var_! gtr Z (set /a len+=2) else set /a len+=1
作者: 随风    时间: 2007-11-9 23:39

我的也不是实例化
你set var=abc0935也可以的。
只是只能对a-z和0-9进行判断. 否则我干吗多设一个变量
setlocal enabledelayedexpansion 放到最前  是什么意识? 有什么区别吗?

[ 本帖最后由 随风 于 2007-11-9 23:41 编辑 ]
作者: somebody    时间: 2007-11-10 02:10

”setlocal enabledelayedexpansion 放到最前  是什么意识? 有什么区别吗?“

哦,是哦,看错了, 不过看着你用call又用setlocal enabledelayedexpansion ....
作者: 随风    时间: 2007-11-10 04:07

呵呵,习惯了,一有变量嵌套就call

[ 本帖最后由 随风 于 2007-11-10 16:18 编辑 ]
作者: youxi01    时间: 2007-11-10 07:28

原帖由 somebody 于 2007-11-9 23:10 发表
那你拿字符跟字母Z比较,你说比较的是什么???
比较的不是字符的ASCII码你说是什么!!!!!!!!!!!!!!!!
还说。。。
http://bbs.bathome.net/viewthread.php?tid=2
if !var_! gtr Z (set /a len+=2 ...

呵呵,说两个问题:
1、别那么激动,大家只是来讨论、解决问题的....
2、批处理直接拿字符来比较,未必就是象vbs那样,通过ascii码来比较大小..其实,它们比较大小的机理根本不一样,
举例说明:
A的ascii码为:65,a的为97,论ascii码,A小于a
但是,在批处理中,A却是大于a的?!
作者: pZjVa0    时间: 2013-7-26 12:13

本帖最后由 pZjVa0 于 2013-7-26 12:54 编辑

谢谢楼主分享。 11# pZjVa0




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2