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

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

[复制链接]
发表于 2009-4-3 17:15:04 | 显示全部楼层
多谢batman 的提示,没有看清题意。不过你写的变量str的值是固定的,不能随意输入。
发表于 2009-4-4 16:15:43 | 显示全部楼层
  1. @echo off
  2. set /p var1=请输入字符串:
  3. set n=0
  4. set var=%var1% #
  5. :begin
  6. set /a n+=1
  7. set /a m=%n%+2
  8. for /f "tokens=%n%,%m%" %%i in ("%var%") do (
  9. if "%%j"=="#" (echo %%i)  else (goto begin))
  10. pause
复制代码
通过给字符串末尾加个#来判断实现
发表于 2009-5-1 00:59:05 | 显示全部楼层

我来学习了

看到题目,自己动手去操作了,结果也出来,可是看看到batman后,我还是晚来一步了!我的思路是跟batman大哥一样的!!的确论坛里藏龙卧虎的!向各位大虾学习。
  1. @echo off&setlocal enabledelayedexpansion
  2. set var=av sdkjf   dfj  sdjf   abc efg
  3. for %%a in (%var%) do (set/a m+=1&set !m!=%%a)
  4. set/a m-=1
  5. echo !%m%!
复制代码
发表于 2009-5-1 08:45:03 | 显示全部楼层
跑题L  ....

[ 本帖最后由 lxzzr 于 2009-5-1 09:17 编辑 ]
发表于 2009-5-1 09:50:49 | 显示全部楼层
看了各位的思路很受启发。特别是随风版主的shift 和 梦想种子的 %%~ni, %%~xi 给我留下很深的印像。效率都很高。
下面我给一段新的思路,字符串越长,倒数列越小,效率越好。(不考虑特殊符号)
  1. @echo off&setlocal enabledelayedexpansion
  2. set "var=av sdkjf dfj sdjf afsd wry av sdkjf dfj sdjf abc wry"
  3. set "str="
  4. for /l %%i in (1,1,8189) do (
  5. set v=!var:~-%%i,1!
  6. if "!v!"==" " set/a n+=1&if !n! equ 2 echo !str!&pause&goto :eof
  7. if !n! geq 1 set str=!var:~-%%i,1!!str!
  8. )
复制代码

[ 本帖最后由 inittab 于 2009-5-1 09:57 编辑 ]
发表于 2009-5-2 00:08:55 | 显示全部楼层

真的受益匪浅!!

今天晚上终于把这题的回复看完了,学习到很多东西!!特别是了解到shift 和%%~ni, %%~xi 等内容!对以后应该很有帮助的
发表于 2023-6-26 10:47:27 | 显示全部楼层
代码内容,设置的颜色为white(即:白色)防止答案轻易泄露
显示方法 1:按住鼠标左键,框住代码即可。
显示 ...
随风 发表于 2008-1-7 21:58



   
    @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 :eof

这段我始终跑不通

我加了自己的理解后才可以

@echo off
set a="sd sdfs sdf sdfsdfa sdfasd abc sdf1"
:000
call :lis %a%
pause
:lis
for /f "tokens=1,2,*" %%a in (%1) do (

  if "%%c"=="" (echo %%a) else set a="%%b %%c"& goto :000
)
exit /b

我有那些部分理解错误,请指点于我,谢谢!
发表于 2023-6-26 10:54:07 | 显示全部楼层
回复 37# kingjames


跑不通的具体表现是什么呢,得到的结果不对?还是有啥报错信息?

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
发表于 2023-6-26 12:34:48 | 显示全部楼层
回复 38# Batcher

代码正常运行无误。

是先前偷懒将多段代码放在同一个批次测试却疏于检查错漏,
在此向版主致歉。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 23:21 , Processed in 0.016290 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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