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

批处理用 for 截取变量中的倒数第二段字符

新手晋级练习题 2

set var=av sdkjf   dfj  sdjf   abc efg
注: 变量 var 的值是不确定的.
要求: 用一个 for  
显示结果:  abc
即:显示变量var的倒数第二段字符.

作用: 加深对 for 工作流程的理解.

[ 本帖最后由 随风 于 2008-1-4 13:32 编辑 ]
技术问题请到论坛发帖求助!

交作业

  1. @echo off
  2. set var="av sdkjf   dfj  sdjf   abc efg"
  3. for /f "tokens=5 delims= " %%i in (%var%) do echo %%i
  4. pause
复制代码
菜鸟就的练,已经试过,能显示abc,有个建议,希望各位老大和高手,对我们的代码点评一下,有利菜鸟进步。
1

评分人数

TOP

楼上代码可是可以!
那如果变量的值是这样的var="av sdkjf   dfj  sdjf   da fea abc efg"呢
那结果就是da了.可能随风兄没有说明白吧!
不大可能的事也许今天实现,根本不可能的事也许明天会实现

TOP

不错,
变量var的段数是不确定的.
技术问题请到论坛发帖求助!

TOP

变量var中abc这一段前面的段数是不确定的,有可能是五段,有可能是三段

所以2楼不是正确答案,各位继续!
不大可能的事也许今天实现,根本不可能的事也许明天会实现

TOP

原帖由 myweb9169 于 2008-1-4 13:12 发表
@echo off
set var="av sdkjf   dfj  sdjf   abc efg"
for /f "tokens=5 delims= " %%i in (%var%) do echo %%i
pause菜鸟就的练,已经试过,能显示abc,有个建议,希望各位老大和高手,对我们的代码点评一下,有 ...


虽不是最佳答案,但也不错了,怪我的题目不清楚.
给点建议:
  空格为for默认的分割符,所以在字符窜中没有其它默认分割符的时候,可以省略delims=  这一句.
技术问题请到论坛发帖求助!

TOP

用了一个SET.
  1. @echo off
  2. set a=sd sdfs sdf sdfsdfa sdfasd 123 sdf1
  3. for %%i in (%a%) do (call set b=%%i %%b%%)
  4. for /f "tokens=2" %%i in ("%b%") do echo %%i
  5. pause
复制代码
1

评分人数

    • sjzong: 思路很好,赞一个PB + 2

TOP

谢谢几位老大鼓励,是我没看懂题目要求,安原题要求是不会作的,
楼上老大,你好像用了2个for了,呵呵,不过用set b=%%i %%b%%)
能把字符串倒排序,学到了,但不明白怎么回事

TOP

回复 9# 的帖子

慢慢来,搞懂了for的流程就会明白了.
技术问题请到论坛发帖求助!

TOP

没人回答了么?
老鸟们出马吧!
看谁的代码最简洁?
建议:将你们的代码用白色字体显示,这样新手们若想自己写代码,就可以不受你们的代码的影响


具体使用方法如下:
  将以下所有的()换成[]即可;

(color=red)代码内容,设置的颜色为white,防止答案轻易泄露(/color)(color=blue)
显示方法 1:按住鼠标左键,框住代码即可。
显示方法 2:点击代码右上角的“复制内容到剪贴板”也可。
(/color)(color=white)(code)
此处写代码
此处写代码
此处写代码
此处写代码
此处写代码
(/code)(/color)
(color=red)高亮(反选)显示代码(/color)

[ 本帖最后由 随风 于 2008-1-7 20:22 编辑 ]
技术问题请到论坛发帖求助!

TOP

代码内容,设置的颜色为white,防止答案轻易泄露
显示方法 1:按住鼠标左键,框住代码即可。
显示方法 2:点击代码右上角的“复制内容到剪贴板”也可。
  1. @echo off
  2. set var=av sdkjf   dfj  sdjf   abc efg
  3. for %%i in (%var%) do (
  4.    call set num=%%str%%
  5.    set str=%%i
  6. )
  7. echo %num%
  8. pause
复制代码

高亮(反选)显示代码

[ 本帖最后由 随风 于 2008-1-7 21:13 编辑 ]
1

评分人数

    • sjzong: 思路很好,赞一个PB + 2
技术问题请到论坛发帖求助!

TOP



  1. @echo off
  2. set a=sd sdfs sdf sdfsdfa sdfasd 123 sdf1
  3. for %%i in (%a%) do (call set a=%%i %%a%%)
  4. call :a %a%
  5. :a
  6. echo.%2
  7. pause
复制代码


[ 本帖最后由 foxJL 于 2008-1-7 21:56 编辑 ]

TOP

回复 12# 的帖子

代码内容,设置的颜色为white(即:白色)防止答案轻易泄露
显示方法 1:按住鼠标左键,框住代码即可。
显示方法 2:点击代码右上角的“复制内容到剪贴板”也可。


不错,不错,真是一山还有一山高,借鉴foxjl的思路,再来两个,不用for用shift

  1. @echo off
  2. set a=sd sdfs sdf sdfsdfa sdfasd abc sdf1
  3. call :lis %a%
  4. pause
  5. :lis
  6. if "%3"=="" echo %1&goto :eof
  7. shift /1
  8. goto lis
复制代码


不用set也可以。

  1. @echo off
  2. set a=sd sdfs sdf sdfsdfa sdfasd abc sdf1
  3. call :lis "%a%"
  4. pause
  5. :lis
  6. for /f "tokens=1,2*" %%a in ("%~1") do (
  7.   if "%%c"=="" (echo %%a) else call :lis "%%b %%c"
  8. )
  9. goto :eof
复制代码

高亮(反选)显示代码

[ 本帖最后由 随风 于 2008-1-7 22:20 编辑 ]
技术问题请到论坛发帖求助!

TOP

@echo off
set a="av sdkjf dfj sdjf abc efg"
for /f "tokens=5 delims= " %%i in (%a%) do @echo %%i
pause

TOP

楼上兄弟的代码跟二楼是一样的.

TOP

返回列表