Board logo

标题: [文本处理] [已解决]批处理去掉字符右边空格的疑问 [打印本页]

作者: tz_being    时间: 2009-11-14 23:42     标题: [已解决]批处理去掉字符右边空格的疑问

先看代码:
  1. call :delright  "kk   "
  2. echo "%DelR%"
  3. pause
  4. :delright
  5. set "DelR=%~1"
  6. :delright2
  7. if "%DelR:~-1%"==" " set DelR=%DelR:~0,-1%&&goto delright2
  8. goto :eof
复制代码
疑问:此代码能够较好的实现去除字符右边的空格,但有时Call右边的参数"kk  "并不是那么有规则,如只是两个空格“  ”或多个空格“         ”(此时不包括字母KK,即第一行代码为call :delright "        "),此时代码便会报错。请问该怎样改进代码,才能过滤掉这种纯粹空格的参数。

[ 本帖最后由 tz_being 于 2009-11-15 21:38 编辑 ]
作者: Batcher    时间: 2009-11-14 23:50

参考:批处理去除文本行前后的空格
http://bbs.bathome.net/thread-5584-1-1.html
作者: tz_being    时间: 2009-11-15 00:02

其实发贴前我看过了,当某一行纯粹由多个空格构成时,那个标准答案也解决不了。
作者: Taurus    时间: 2009-11-15 10:53     标题: 回复 1楼 的帖子

这样可以吗?
@echo off
set "str=kk  "
set "str=%str: =%"
if "%str%"=="" (echo nothing) else (echo %str%)
pause

作者: tz_being    时间: 2009-11-15 20:18

感谢Taurus解答,DeLeTe朋友给出另外一个近似完成的答案:
  1. @echo off
  2. call :delright "12 3   "
  3. echo "%DelR%"
  4. pause
  5. :delright
  6. set DelR=
  7. for %%i in (%~1) do call set DelR=%%DelR%%%%i
  8. set DelR=%DelR:~1,-1%
  9. goto :eof
复制代码
美中不足的是,如果参数不带空格,会被截掉最右边的一个字符。(注意:set DelR=后面和DelR=%%DelR%%%%i后面都带有一个空格)

[ 本帖最后由 tz_being 于 2009-11-15 21:20 编辑 ]
作者: Taurus    时间: 2009-11-15 20:55

抱歉,不太理解你想得出甚麽结果,因为看了帖子两个代码的结果有分别:
@echo off
call :delright "kk  "
echo "%DelR%"
pause

:delright
set DelR=
for %%i in (%~1) do call,set DelR=%%DelR%%%%i
set DelR=%DelR:~1,-1%
goto :eof
call :delright "kk  "
echo "%DelR%"
pause

:delright
set "DelR=%~1"
:delright2
if "%DelR:~-1%"==" " set DelR=%DelR:~0,-1%&&goto delright2
goto :eof

是要得出甚么结果?能否举例?
"12    34"
"1234    "
"    1234"
"1  23  4"
作者: tz_being    时间: 2009-11-15 21:08

原帖由 Taurus 于 2009-11-15 20:55 发表

是要得出甚么结果?能否举例?


如果需处理的参数是“12 3   ”,我希望的结果是“12 3”;
如果需处理的参数是“       ”,我希望的结果是“”
DeLeTe朋友的代码,set DelR=后面和DelR=%%DelR%%%%i后面都带有一个空格

[ 本帖最后由 tz_being 于 2009-11-15 21:23 编辑 ]
作者: Taurus    时间: 2009-11-15 21:24     标题: 回复 7楼 的帖子

這樣?
(在你原碼加了一行,不肯定是否你要的結果...)
call :delright  "   kk kk    kk kk   "
echo "%DelR%"
pause
:delright
set "DelR=%~1"
:delright2
if "%DelR:~0%"==" " set DelR=&goto :eof
if "%DelR:~-1%"==" " set DelR=%DelR:~0,-1%&&goto delright2
goto :eof

[ 本帖最后由 Taurus 于 2009-11-15 21:27 编辑 ]
作者: tz_being    时间: 2009-11-15 21:38

感谢Taurus朋友,完美解决!
作者: Taurus    时间: 2009-11-15 21:42     标题: 回复 9楼 的帖子

客氣了.......




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