Board logo

标题: 批处理如何在下列字符中以bathome为分隔符 [打印本页]

作者: novaa    时间: 2008-1-12 17:59     标题: 批处理如何在下列字符中以bathome为分隔符

Str=fdkljdlkdfdkljgflkkgffkljflkbathome;lkdf;ljkdg;lkfdbathome;dlfld;lkl;kl;l,.da/u/kbathomefdaffas
请以bathome为分隔符吧他分为几段。
作者: ieutk    时间: 2008-1-12 19:25

  1. @echo off
  2. set "str=fdkljdlkdfdkljgflkkgffkljflkbathome;lkdf;ljkdg;lkfdbathome;dlfld;lkl;kl;l,.da/u/kbathomefdaffas"
  3. set "str=%str:bathome=_%"
  4. for /f "tokens=1-4 delims=_" %%a in ("%str%") do (
  5. echo %%a^
  6. %%b^
  7. %%c^
  8. %%d)
  9. pause
复制代码


[ 本帖最后由 wxcute 于 2009-5-10 11:08 编辑 ]
作者: xiaoxx    时间: 2008-4-27 20:53

恩,这是一种解决办法。
但有时候拿到一个很长的文本后,不知道哪个字符没有被用到。
或者在经过仔细查找后,发现所有字符都有用到.就比较麻烦了。
作者: 梦想种子    时间: 2008-4-27 21:20

  1. @echo off
  2. set "str=fdkljdlkdfdkljgflkk gffkljflkbathome;lkdf;ljkdg;lkfdbathome;dlfld;lkl;kl;l,.da/u/kbathomefdaffas"
  3. set "str=%str: =n#a#t#u#r#e%"
  4. set "str=%str:bathome= %"
  5. for /f "tokens=1-4 delims= " %%i in ("%str%") do (
  6. call :conv "%%i"
  7. call :conv "%%j"
  8. call :conv "%%k"
  9. call :conv "%%l"
  10. )
  11. pause&exit
  12. :conv
  13. set "s=%~1"
  14. set "s=%s:n#a#t#u#r#e= %"
  15. echo %s%
复制代码
没有人会用到“n#a#t#u#r#e”吧。除了我...o(∩_∩)o...
作者: youxi01    时间: 2008-4-27 21:32

呵呵,楼上MM的思路还蛮细腻啊,赞一个!
作者: 随风    时间: 2008-4-27 21:42

那就来个不用查找的。
  1. @echo off
  2. set "Str=bathome112222bathome;l23333 33bathome;4444bathome555bathome"
  3. :loop
  4.    set num=%str:*bathome=%
  5.    call set var=a%%str:bathome%num%=%%a
  6.    if not "%var%"=="aa" echo.%var:~1,-1%
  7.    set str=%num%
  8.    if "%str%"=="%var:~1,-1%" set "num="
  9.    if defined num goto loop
  10. pause
复制代码

作者: 梦想种子    时间: 2008-4-27 22:13     标题: 回复 5楼 的帖子

谢谢啦...去年暑假有个偶然的机会学的。
在我们班里面我看起来比较小...都比他们小一岁噢。
很快就高考了...可能一个多月后才能常看望论坛可爱的大伙儿们。
“youxi01”是“游戏01”的意思么?
作者: 梦想种子    时间: 2008-4-27 22:16     标题: 回复 6楼 的帖子

看到随风的不少代码,都是可以“不用查找”的...嗯嗯,思路很不错。
作者: xiaoxx    时间: 2008-4-28 10:51

强人。
顺带请教个问题,echo 777bathome112222bathome;l23333 33bathomebathome;4444bathome555bathome|findstr "bathome"
输出到屏幕上的内容怎么存到某个变量里?
作者: youxi01    时间: 2008-4-28 13:53

用for来接收,然后用set定义相关变量就行了。
如:
  1. @echo off
  2. for /f "delims=" %%i in ('echo 33bathomebathome;4444bathome555bathome^|findstr "bathome"') do set test=%%i
  3. echo %test%
  4. pause>nul
复制代码

作者: xiaoxx    时间: 2008-4-28 14:46

echo 33bathomebathome;4444bathome555bathome|findstr "bathome"
的结果是:33bathomebathome;4444bathome555bathome
用for接收后那个分号";" 变成空格" "了.
看来分号:前面也要加上^

方法是可以用的,谢谢 呵呵。




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