[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理去掉字符右边空格的疑问

先看代码:
  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 编辑 ]

参考:批处理去除文本行前后的空格
http://bbs.bathome.net/thread-5584-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

其实发贴前我看过了,当某一行纯粹由多个空格构成时,那个标准答案也解决不了。

TOP

回复 1楼 的帖子

这样可以吗?
@echo off
set "str=kk  "
set "str=%str: =%"
if "%str%"=="" (echo nothing) else (echo %str%)
pause
带内地用语或带里语的文章,在下读写总觉有点吃力;
如误解了各位意思的讲勿见怪   ^_^

TOP

感谢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 编辑 ]

TOP

抱歉,不太理解你想得出甚麽结果,因为看了帖子两个代码的结果有分别:
@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"
带内地用语或带里语的文章,在下读写总觉有点吃力;
如误解了各位意思的讲勿见怪   ^_^

TOP

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

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


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

[ 本帖最后由 tz_being 于 2009-11-15 21:23 编辑 ]

TOP

回复 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 编辑 ]
带内地用语或带里语的文章,在下读写总觉有点吃力;
如误解了各位意思的讲勿见怪   ^_^

TOP

感谢Taurus朋友,完美解决!

TOP

回复 9楼 的帖子

客氣了.......
带内地用语或带里语的文章,在下读写总觉有点吃力;
如误解了各位意思的讲勿见怪   ^_^

TOP

返回列表