标题: [系统相关] 【已解决】批处理for语句中tokens如何动态引用 [打印本页]
作者: NeverOK 时间: 2009-5-7 13:15 标题: 【已解决】批处理for语句中tokens如何动态引用
代码如下:
@echo off
set n=
if exist c:\format.txt set n=1
if exist d:\format.txt set n=2
cd.>abc.txt
>>abc.txt echo c d e f g h i j k l m n o p q r s t u v w x y z
for /l %%i in (1,1,%n%) do (set m=%%i&for /f "tokens=%m%" %%j in (abc.txt) do set o=%%j&label %o%: <Format.txt)
对不起,忘记把abc文件内容帖出来了,SORRY!
[ 本帖最后由 NeverOK 于 2009-5-7 21:00 编辑 ]
作者: NeverOK 时间: 2009-5-7 13:39
自己先顶一下
由于 %m% 只能使用最后一次 %n% 使用的变量内容,比如%n%包含一维数组(1234), %m% 只能使用最后一个4,为什么呢?
作者: everest79 时间: 2009-5-7 15:14
for循环内的即时性变量需要开启变量延缓扩展
for 的options参数应该是在命令行载入时初始化的,不会动态扩展建议如下处理- :@echo off
- Setlocal EnableDelayedExpansion
-
- if exist c:\format.txt set n=1
- if exist d:\format.txt set n=2
- >abc.txt echo c d e f g h i j k l m n o p q r s t u v w x y z
- for /l %%i in (1,1,1) do (
- set m=%%i
-
- ::以下为三种调用,第一种不需要开启setlocal扩展,第二种需要,第三种不仅不需要开启setlocal,也不用建立新变量m
- call :fff %%m%%
-
- call :fff !m!
-
- call :fff %%i
-
- )
-
-
- pause
- goto :eof
-
-
-
- :fff
- for /f "tokens=%1" %%j in (abc.txt) do echo set o=%%j^&label !o!:<format.txt
复制代码
作者: NeverOK 时间: 2009-5-7 16:12
问题已经解决,非常感谢 everest79 哥们的帮忙,谢谢!
现在又遇到一个问题,看楼下:
[ 本帖最后由 NeverOK 于 2009-5-7 19:53 编辑 ]
作者: NeverOK 时间: 2009-5-7 19:52
同志们:还有个问题
这个语句必须在一条语句内完成(不能象 CALL :fff %%i 这样调用),大家能帮帮我吗?
这个语句不能在一条语句内完成吗?
如:
for /l %%i in (1,1,%n%) do (set m=%%i&for /f "tokens=%m%" %%j in (abc.txt) do set o=%%j&label %o%: <Format.txt)
[ 本帖最后由 NeverOK 于 2009-5-7 19:54 编辑 ]
作者: netbenton 时间: 2009-5-7 20:16
不明白楼主为什么非要做批处理做不到的事,也不知道些题有何意义?
但是这个问题是可以一句完成,不过要换种方法:
for /f "tokens=*" %%a in (abc.txt) do for %%b in (%%a) do set/a m+=1&if !m! leq !n! (label %%b:<format.txt) else (goto k)
:ok
作者: NeverOK 时间: 2009-5-7 20:29
6楼同志,你好!
是这样的.
假如象2楼同志那样的语句执行的话,在:fff里面必须加上goto语句以表示结束让后面的代码能顺利运行.
就不能顺利更改所有盘符的卷标(因goto语句不让其他的for执行完毕).
那么还有一个变通的方法
把 call :fff %%i
改为: call 111.bat %%1
那么只要把:fff内的语句写到111.bat里面了
问题出来了,执行完111.bat,就停顿在这里了
所以.............
我郁闷ing
现在我测试你给出的代码.非常感谢你!!!!!!!!
作者: everest79 时间: 2009-5-7 20:51
...- if exist .....
- ...................
- for /f ...............(
- .......................
- call :fff am1
- )
- ...............................
- .........................
- ....................
-
- goto :eof
-
- :fff
- ......................
- goto :eof
复制代码
作者: NeverOK 时间: 2009-5-7 21:00 标题: 感谢两位
已经解决,感谢大家帮助.
主要还是我没经验,谢谢大家的帮助.还是使用 everest79 哥们的语句完成了这个任务,在此感谢 everest79
netbenton哥们给的语句思路特别好,我之所以用everest79的语句就是想避开
for %%a in (c d e f g h i j k l m n o p q r s t u v w x y z) do label %%a: <format.txt
出现那些特别多的提示.netbenton哥们的语句就会提示
再次感谢两位.-----------------结帖
作者: NeverOK 时间: 2009-5-7 21:01 标题: 解决办法
echo off
Setlocal EnableDelayedExpansion
if exist c:\format.txt set n=1
if exist d:\format.txt set n=2
>abc.txt echo c d e f g h i j k l m n o p q r s t u v w x y z
for /l %%i in (1,1,1) do (
set m=%%i
::以下为三种调用,第一种不需要开启setlocal扩展,第二种需要,第三种不仅不需要开启setlocal,也不用建立新变量m
call :fff %%m%%
call :fff !m!
call :fff %%i
)
pause
goto :eof
:fff
for /f "tokens=%1" %%j in (abc.txt) do echo set o=%%j^&label !o!:<format.txt
goto :eof
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |