Board logo

标题: [已解决]for命令嵌套时token选项的问题 [打印本页]

作者: xuleicz     时间: 2009-2-6 23:55    标题: [已解决]for命令嵌套时token选项的问题

这个代码的目标是
对于字符串avi wma mp3
当n=1,2,3时分别输出avi,wma,mp3
但我的代码是错的,想请教下错在哪

@echo off & setlocal EnableDelayedExpansion
set tp=avi wma mp3
for %%i in (%tp%) do (
set /a n+=1
for /f "tokens=!n! delims= " %%j in ("%tp%") do (
echo %%j
)
)
pause

***
已经找到了答案,可以在第一个for中用call调用第二个for

[ Last edited by xuleicz on 2009-2-7 at 12:09 ]
作者: heheguai     时间: 2009-2-7 00:06
对于这么短的字符为啥一定要用for呢,直接用字符截取快的多啊!
set tp=avi wma mp3
%tp:~0,3%
作者: netbenton     时间: 2009-2-7 00:57
这样更灵活一点:
set tp1=avi
set tp2=wma
set tp3=mp3
set /p n=输入[1,2,3]
call :sub %n%
goto :eof

:sub
echo %tp%1%
goto :eof

或者开始变量延迟后这样用:
set tp1=avi
set tp2=wma
set tp3=mp3
set /p n=输入[1,2,3]
echo !tp%n%!
作者: xuleicz     时间: 2009-2-7 09:26

作者: xuleicz     时间: 2009-2-7 11:53
我在4#的回复怎么改不了

3楼的第二个方法倒是个好方法。其实我是要这样的效果:
tp和ass其实很长
使两个命令同步
(以下代码是错误的)

setlocal EnableDelayedExpansion
tp=avi wmv mp3
ass=avifile wmvmedia mp3music
for %%i in (%tp%) do (
set /a n+=1
for /f "tokens=!n! delims= " %%a in ("%tp%") do com1 %%a
for /f "tokens=!n! delims= " %%b in ("%tp%") do com2 %%b
)

[ Last edited by xuleicz on 2009-2-7 at 12:08 ]