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

[文本处理] [已解决]截取字符来显示中文行号的批处理为何显示不出截取的字符?

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a n=1
  4. for /f %%i in (1.txt) do (
  5. set a= 一二三四五六七八九十
  6. set b=%a:~!n!,1%
  7. echo !b! %%i
  8. set /a n=!n!+1
  9. )
  10. pause >nul
复制代码
为什么显示的截取不能截到东西呢.在群里问MAN老大说.语法不对..但又没报错,.
这个是老大写的...有人能告诉我一下.为什么不能截到.到底哪个语法错了吗..虽然能问到对的代码.但我只是想明白为什么会出问题.抱歉.
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a n=1
  4. for /f %%i in (1.txt) do (
  5. set a= 一二三四五六七八九十
  6. for %%a in (!n!) do set "b=!a:~%%a,1!"
  7. echo !b! %%i
  8. set /a n+=1
  9. pause
  10. )
复制代码
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2
我是一个新手.看到此签名的请发点教程我!!谢谢!!

收到..谢谢领导..
我是一个新手.看到此签名的请发点教程我!!谢谢!!

TOP

善用搜索,会有很多收获,这句话不仅仅指论坛的搜索功能
【教程汇总】批处理中的变量延迟扩展、变量嵌套:
http://bbs.bathome.net/viewthrea ... 4%C1%BF%D1%D3%B3%D9
批处理变量延迟详解:
http://bbs.bathome.net/viewthrea ... 4%C1%BF%D1%D3%B3%D9

TOP

嗯.有道理 啊...这方面有没有详细的教程啊.老大..
我是一个新手.看到此签名的请发点教程我!!谢谢!!

TOP

动态的变量里面再有动态的变量的时候就要用这个吧..不能!里面再套!号....
wangqi0077 发表于 2011-5-28 18:20

可以仔细想一想,!号是成对解释的,cmd又是从左向右进行判断的,如果把!a:~%n%,1!写成!a:~!n!,1!时,cmd会把它怎么划分呢?

TOP

动态的变量里面再有动态的变量的时候就要用这个吧..不能!里面再套!号....
我是一个新手.看到此签名的请发点教程我!!谢谢!!

TOP

谢谢,,,这才是想要的嘛...新手不是很懂...谢谢指导.
我是一个新手.看到此签名的请发点教程我!!谢谢!!

TOP

楼主不是自己贴了解决方案吗?
要想在语块内实现变量嵌套,必须使用能够“变”的变量,这时候用%a%就不是很合适了,但是我们既要动态地读取变量n,又要动态地读取变量a,可是单靠“!”变量延迟又不够用,所以一般有几种解决方案,其中最经济实惠的就是将普通变量!n!通过for转换为%%a参数变量:
for %%a in (!n!) do set "b=!a:~%%a,1!"

TOP

加了变量延时,不是能得到FOR里面设置的变量值么.
我是一个新手.看到此签名的请发点教程我!!谢谢!!

TOP

那我把a在FOR外面就SET行不行呢?
或者能帮我稍微改一下吗.....
我是一个新手.看到此签名的请发点教程我!!谢谢!!

TOP

%str%是在for语句执行之前就已经被解释了的,因为此时变量a不存在,所以“%a:~!n!,1%”被解释为“~!n!,1”,而!n!是在for循环内被解释的,所以“~!n!,1”就被解释为“~1,1”、“~2,1”...等等

TOP

返回列表