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

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

[复制链接]
发表于 2008-3-29 23:17:10 | 显示全部楼层
  1. @echo off
  2. set var=av sdkjf   dfj  sdjf df abc efg
  3. set var=%var: =.%
  4. for %%i in (%var%) do set "var=%%~ni"
  5. for %%i in (%var%) do set "var=%%~xi"
  6. echo %var:.=%
  7. pause
复制代码

或者
  1. @echo off
  2. set var=av sdkjf   dfj  sdjf df abc efg
  3. set var=%var: =.%
  4. call :get %var% 0
  5. call :get %var% 1
  6. echo %var:.=%
  7. pause
  8. exit
  9. :get
  10. if %2 == 0 (set var=%~n1) else set var=%~x1
复制代码

[ 本帖最后由 梦想种子 于 2008-3-29 23:27 编辑 ]

评分

参与人数 1PB +6 收起 理由
youxi01 + 6 不错,不错

查看全部评分

发表于 2008-4-6 15:14:14 | 显示全部楼层
@echo off
set var=av sdkjf   dfj  sdjf df abc efg
set var=%var: =.%
for %%i in (%var%) do set "var=%%~ni"
for %%i in (%var%) do set "var=%%~xi"
echo %var:.=%
pause

能不能给我解释下%%~ni和%%~xi什么意思?
发表于 2008-4-6 18:12:08 | 显示全部楼层
%%~ni 得到文件名
%%~xi 得到后缀名

1、av sdkjf   dfj  sdjf df abc efg (初始值)
2、av.sdkjf...dfj..sdjf.df.abc.efg (把空格换成点)
3、av.sdkjf...dfj..sdjf.df.abc (获得文件名)
4、.abc (获得后缀名)
5、abc (去掉前面的点)
发表于 2008-4-27 14:45:34 | 显示全部楼层
  1. @echo off
  2. set var=av sdkjf   dfj  sdjf df abc efg
  3. for %%i in (%var%) do call :rev %%i
  4. set /a c-=1
  5. call echo %%#%c%%%
  6. pause
  7. exit
  8. :rev
  9. set /a c+=1
  10. set #%c%=%1
复制代码
这样对么?

评分

参与人数 1PB +2 收起 理由
youxi01 + 2 MM的代码也不错

查看全部评分

发表于 2008-4-27 18:02:39 | 显示全部楼层
@echo off
set var=av sdkjf stdf asby  dfj  sdjf   abc efg
set str="test"
setlocal EnableDelayedExpansion
for %%i in (%var%) do (
   set last=!str!
   set str=%%i
)
echo !last!嘿嘿
pause

想法是用2个变量,str始终存储当前%%i,last存储%%i的前一个.
学习中,那个call没看懂,有高手给解释下吗?
发表于 2008-4-27 18:11:20 | 显示全部楼层
以上的代码类 随风的

call在这里的用途类似 延迟
发表于 2008-5-6 15:18:36 | 显示全部楼层
那如果是要倒数第三四段呢?
因为我照各位的方法能达到要求,但我自己对倒数第三~以后的没有办法,
请各位好心回答我一下,我是刚学的就想到论坛来请各位带进门!
发表于 2008-5-6 18:27:33 | 显示全部楼层
截取倒数第三段
@echo off
set var=af df aa dfdg adfd  df dgg
for %%i in (%var%) do (call call set d=%%b%%
call set b=%%e%%
set e=%%i)
echo %d%
pause
请帮忙看看

[ 本帖最后由 fu417674 于 2008-5-6 18:29 编辑 ]
发表于 2008-9-13 22:06:28 | 显示全部楼层

菜鸟点评

[code]@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 lis
这个题目各位高手都能给出正确结果,就菜鸟的接受能力,和解题思路来讲,应该是随风版主,上面的这段代码,是本题目的最佳答案! 
虽然其他版主的也很简洁,但就解决问题,除了技术和思路来说。越浅显易懂,越是对我等菜鸟有帮助!

[ 本帖最后由 bater 于 2008-9-13 22:11 编辑 ]
发表于 2008-9-14 21:25:46 | 显示全部楼层
  1. @echo off
  2. set var=av sdkjf   dfj  sdjf df     abc    efg
  3. set var=%var: =.%
  4. call :xx %var%
  5. call :x %var%
  6. pause>nul
  7. :xx
  8. set var=%~n1
  9. goto :eof
  10. :x
  11. echo%~x1
复制代码
我的代码用for有点勉强,参考[ 梦想种子]
  1. @echo off
  2. set var=av sdkjf   dfj  sdjf df     abc    efg
  3. set var=%var: =.%
  4. for %%i in (%var%) do set "var=%%~ni"
  5. call :x %var%
  6. pause>nul
  7. goto :eof
  8. :x
  9. echo%~x1
复制代码
发表于 2008-9-21 21:29:46 | 显示全部楼层

牙慧

foxjl很聪明啊!但有点不明白为什么call set b=%%i %%b%% 会使字符串倒序啊!
既然var的值不确定貌似下面用set /p 更合题意啊! 呵呵...拾君牙慧,请多指教
@echo off
set /p a=
for %%i in (%a%) do (call set b=%%i %%b%%)
for /f "tokens=2" %%i in ("%b%") do echo %%i
pause
发表于 2008-10-23 17:19:27 | 显示全部楼层
@echo off
set var=av sdkjf   dfj  sdjf   abc efg
for /f "tokens=5 delims= " %i in ("%var%") do echo %i
这个即可解决
发表于 2008-10-23 19:56:10 | 显示全部楼层
楼上的是代码只能针对字符串只有5段的情况,其它段数则不符合了,呵呵。
发表于 2009-4-2 23:51:24 | 显示全部楼层
输入任意字符串:
  1. @echo off
  2. set /p str=请输入字符串(形如:ee dd   dd  sf abc ed):
  3. for %%i in (%str%) do set /a n+=1
  4. set /a n-=1
  5. for /f "tokens=%n%" %%i in ("%str%") do echo %%i
  6. pause
复制代码
发表于 2009-4-3 00:09:43 | 显示全部楼层
楼上的思路是正确的,但应注意到题目要求是一个for,我也来做一下吧:
  1. rem 试用于截取倒数任何一段
  2. @echo off
  3. set "str=aa bb cc dd ee ff gg hh"
  4. for %%a in (%str%) do set /a n+=1&call,set _%%n%%=%%a
  5. set /p num=请输入要倒数截取的段数(请注意应小于总段数加1):
  6. set /a num-=1,n-=num
  7. call,echo 截取的字符为:%%_%n%%%&pause>nul
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 02:48 , Processed in 0.012816 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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