标题: 新手浅谈批处理for /l %%i变量与%PATH:~*,1%的结合 [打印本页]
作者: rsent 时间: 2011-2-22 00:09 标题: 新手浅谈批处理for /l %%i变量与%PATH:~*,1%的结合
我想单独显示出%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 编辑 ]
作者: caruko 时间: 2011-2-22 01:29
没看懂,你启用变量延迟,用!来调用变量是正确思路啊
但是为什么会出现 !%%a%%b! ?
直接下面这样就可以了啊- for /l %%i in (0,1,100) do (
- echo !line:~%%i,1!
- )
复制代码
作者: caruko 时间: 2011-2-22 01:40
有点明白你那个for /f的意思了
但是,既然你for /f 的用意是将%%i先转成数字,那么在for 的括号中根本无需!!来延迟变量。
那么只要下面这样就可以- for /l %%i in (0,1,100) do (
- for /f "delims=*" %%a in ("line:~%%i,1") do (
- echo %%a
- echo !%%a!
- )
- )
复制代码
实际上,你的for /f 就相当于这样
- for /l %%i in (0,1,100) do (
- set str=line:~%%i,1
- echo !str!
- )
复制代码
其实直接 !line:~%%i,1! 就可以得到结果了。。
作者: wc726842270 时间: 2011-2-22 03:01
原帖由 rsent 于 2011-2-22 00:09 发表
我想单独显示出%line%中的第一个,第二个,第三个,一直到 第100个字。(假设%line%有100个字)下面代码是
显示第一个,第二个,第三个。@echo off
set line=abcdefg
echo %line:~0,1% %line:~1,1% %line:~2,1%
p ...
呵呵,如果一下全明白了,那我们学习干什么呢,论谈又有什么意义呢
作者: hanyeguxing 时间: 2011-2-22 09:38
基于楼主的目的,推荐在 for f 中套 for /l 。例如:- for /f "delims=" %%a in (1.txt) do (
- set a=%%a
- for /l %%b in (1 1 100) do if not "!a:~%%b,1!"=="" echo;!a:~%%b,1!
- )
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |