找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 73586|回复: 38

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

[复制链接]
发表于 2008-1-3 23:45:44 | 显示全部楼层 |阅读模式
新手晋级练习题 2

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

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

[ 本帖最后由 随风 于 2008-1-4 13:32 编辑 ]
发表于 2008-1-4 13:12:42 | 显示全部楼层

交作业

  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,有个建议,希望各位老大和高手,对我们的代码点评一下,有利菜鸟进步。

评分

参与人数 1PB +2 收起 理由
ieutk + 2 不错

查看全部评分

发表于 2008-1-4 13:26:28 | 显示全部楼层
楼上代码可是可以!
那如果变量的值是这样的var="av sdkjf   dfj  sdjf   da fea abc efg"呢
那结果就是da了.可能随风兄没有说明白吧!
 楼主| 发表于 2008-1-4 13:29:54 | 显示全部楼层
不错,
变量var的段数是不确定的.
发表于 2008-1-4 13:39:48 | 显示全部楼层
变量var中abc这一段前面的段数是不确定的,有可能是五段,有可能是三段

所以2楼不是正确答案,各位继续!
 楼主| 发表于 2008-1-4 15:31:45 | 显示全部楼层
原帖由 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=  这一句.
发表于 2008-1-4 15:44:53 | 显示全部楼层
用了一个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
复制代码

评分

参与人数 1PB +2 收起 理由
sjzong + 2 思路很好,赞一个

查看全部评分

发表于 2008-1-4 16:03:17 | 显示全部楼层
谢谢几位老大鼓励,是我没看懂题目要求,安原题要求是不会作的,
楼上老大,你好像用了2个for了,呵呵,不过用set b=%%i %%b%%)
能把字符串倒排序,学到了,但不明白怎么回事
 楼主| 发表于 2008-1-4 16:09:57 | 显示全部楼层

回复 9# 的帖子

慢慢来,搞懂了for的流程就会明白了.
 楼主| 发表于 2008-1-7 20:15:26 | 显示全部楼层
没人回答了么?
老鸟们出马吧!
看谁的代码最简洁?
建议:将你们的代码用白色字体显示,这样新手们若想自己写代码,就可以不受你们的代码的影响


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

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

[ 本帖最后由 随风 于 2008-1-7 20:22 编辑 ]
 楼主| 发表于 2008-1-7 21:11:48 | 显示全部楼层
代码内容,设置的颜色为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 编辑 ]

评分

参与人数 1PB +2 收起 理由
sjzong + 2 思路很好,赞一个

查看全部评分

发表于 2008-1-7 21:53:41 | 显示全部楼层



  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 编辑 ]
 楼主| 发表于 2008-1-7 21:58:40 | 显示全部楼层

回复 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 编辑 ]
发表于 2008-3-29 21:48:53 | 显示全部楼层
@echo off
set a="av sdkjf dfj sdjf abc efg"
for /f "tokens=5 delims= " %%i in (%a%) do @echo %%i
pause
发表于 2008-3-29 21:58:43 | 显示全部楼层
楼上兄弟的代码跟二楼是一样的.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 01:46 , Processed in 0.024050 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表