我想单独显示出%line%中的第一个,第二个,第三个,一直到 第100个字。(假设%line%有100个字)下面代码是
显示第一个,第二个,第三个。- @echo off
- set line=abcdefg
- echo %line:~0,1% %line:~1,1% %line:~2,1%
- pause
复制代码 不想一直复制后再改数字,因为要改到100。%line:~*,1%.
所以就想到了 /f /l 命令。请看下面代码,意思是 在屏幕上显示 %line:~0,1% 到 %line:~100,1%
也就是单独显示%line%中的第一个,第二个到第一百个字。
可是dos不支持。
读取echo %line:~%%i,1%时,先读取了 echo %line:~% 所以显示%line%- @echo off
- set line=abcdefg
- for /l %%i in (0,1,100) do (
- echo %line:~0,1%
- echo %line:~%%i,1%
- )
- pause
复制代码 又想到了 for /f 命令和变量延迟,觉得把%换成!应该有可能的。
经过运行,虽然 %%a%%b=line:~*,1 ,但是!%%a%%b!不等于%line:~*,1%
如何才能使for /l 与 %PATH:~*,1% 相结合?
难道是!和%相互冲突了,导致!%%a%%b!不被dos接受。
怎么才能只使用 !或 %的一个?或者怎么让dos接受?
最后我想到了一个办法!
- @echo off
- setlocal enabledelayedexpansion
- set line=abcdefg
- for /l %%i in (0,1,100) do (
- for /f "delims=[ tokens=1,2" %%a in ("!line:~[%%i,1!") do (
- echo %%a%%becho !%%a%%b!
- )
- )
- pause
复制代码
觉得for /f命令和 in ("!line:~[%%i,1!") 结合的不够深,导致最后的失败。
下面代码经过试验。完美的达到要求!!!
原理: 利用delims=空格,把 n ("!:~ %%i,1!") 中间的空格取消。- @echo off
- setlocal enabledelayedexpansion
- set line=abcdefg
- for /l %%i in (0,1,100) do (
- for /f "delims= tokens=1,2" %%a in ("!line:~ %%i,1!") do (
- echo %%a%%b
- )
- )
- pause
复制代码 本文是为自己的另一篇文章做铺垫,为提取单独字数作准备。 http://www.bathome.net/thread-11139-1-1.html
本人技术有限,待以后学成后再修改补充。
如果讲述的观点有误,请指出。
很感谢caruko !
他说的很对,其实直接 !line:~%%i,1! 就可以得到结果了。
当时看到一屏幕的 “ECHO 处于关闭状态” 就以为行不通,没想到答案在最上面,白白浪费了时间。(当时开了延迟做的,写文章的时候没写上)
[ 本帖最后由 rsent 于 2011-2-22 02:11 编辑 ] |