返回列表 发帖

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

新手晋级练习题 2

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

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

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

交作业

@echo off
set var="av sdkjf   dfj  sdjf   abc efg"
for /f "tokens=5 delims= " %%i in (%var%) do echo %%i
pauseCOPY
菜鸟就的练,已经试过,能显示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.
@echo off
set a=sd sdfs sdf sdfsdfa sdfasd 123 sdf1
for %%i in (%a%) do (call set b=%%i %%b%%)
for /f "tokens=2" %%i in ("%b%") do echo %%i
pauseCOPY
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:点击代码右上角的“复制内容到剪贴板”也可。
@echo off
set var=av sdkjf   dfj  sdjf   abc efg
for %%i in (%var%) do (
   call set num=%%str%%
   set str=%%i
)
echo %num%
pauseCOPY

高亮(反选)显示代码

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

评分人数

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

TOP



@echo off
set a=sd sdfs sdf sdfsdfa sdfasd 123 sdf1
for %%i in (%a%) do (call set a=%%i %%a%%)
call :a %a%
:a
echo.%2
pauseCOPY


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

TOP

回复 12# 的帖子

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


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

@echo off
set a=sd sdfs sdf sdfsdfa sdfasd abc sdf1
call :lis %a%
pause
:lis
if "%3"=="" echo %1&goto :eof
shift /1
goto lisCOPY


不用set也可以。

@echo off
set a=sd sdfs sdf sdfsdfa sdfasd abc sdf1
call :lis "%a%"
pause
:lis
for /f "tokens=1,2*" %%a in ("%~1") do (
  if "%%c"=="" (echo %%a) else call :lis "%%b %%c"
)
goto :eofCOPY

高亮(反选)显示代码

[ 本帖最后由 随风 于 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

返回列表