Board logo

标题: [已结,谢谢dikex]变量嵌套问题 [打印本页]

作者: victor888     时间: 2008-11-1 21:46    标题: [已结,谢谢dikex]变量嵌套问题

前2天有朋友帮我解决了两个字符串连接的问题,即:
字符串1:A B C D E
字符串2:1 2 3 4 5 6 7 8
问如何得到不使用临时文件的方式得到:A1 B2 C3 D4 E5字串。

下面是一个解决方案:
setlocal enabledelayedexpansion&color
set str1=A B C D E
set str2=1 2 3 4 5 6 7 8
for %%i in (%str1%) do (
call set "str=!str!%%i%%str2:~!n!,1%% "
set/a n+=2
)
echo !str!
pause
其中:
call set "str=!str!%%i%%str2:~!n!,1%% "
就是变量嵌套,可是我现在想在FOR循环里运行命令并依次引用str2中的每个字符,尝试了好多手段,就是不能成功,理想的模式如下:
setlocal enabledelayedexpansion&color
set str1=A B C D E
set str2=1 2 3 4 5 6 7 8
for %%i in (%str1%) do (
命令 %%str2:~!n!,1%%
set/a n+=2
)
pause
上面的%%str2:~!n!,1%%就是不能获得正确的值。

请帮忙,谢谢!

[ Last edited by victor888 on 2008-11-3 at 09:55 ]
作者: s11ss     时间: 2008-11-1 22:57
call echo %%str2:~!n!,1%%
作者: victor888     时间: 2008-11-1 23:20
楼上的,我要的不是ECHO命令,实际上是MOUNTVOL命令,NT系统都有这个。
作者: terse     时间: 2008-11-2 00:13
怎么个依次法?
最终结果是什么
作者: victor888     时间: 2008-11-2 08:40

SETLOCAL ENABLEDELAYEDEXPANSION

set fulldrv=CDEFGHIJKLMNOPQRSTUVWXYZ
set neworder=C E K X G
set /a n=0

for %%a in (%neworder%) do (
   for /f %%b in ('mountvol %%a: /l') do (
      mountvol %%a: /d
      mountvol %%fulldrv:~!n!,1%%: %%b
      set /a n+=1  
  )
)
这句:
mountvol %%fulldrv:~!n!,1%%: %%b
里面的%%fulldrv:~!n!,1%%取不到值。

谢谢!
作者: victor888     时间: 2008-11-2 18:31
没人能解决吗?
作者: dikex     时间: 2008-11-2 21:44
尝试
call mountvol %%fulldrv:~!n!,1%%: %%b
作者: victor888     时间: 2008-11-2 22:34
楼上的兄弟,这个命令我也尝试了,不行。
我还尝试了 call echo "%%fulldrv:~!n!,1%%: %%b |mountvol.exe"
也不行。
作者: dikex     时间: 2008-11-2 22:44
试试这个,把mountvol部分剥离出来了
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set fulldrv=CDEFGHIJKLMNOPQRSTUVWXYZ
set neworder=C E K X G
set /a n=0

for %%a in (%neworder%) do (
   for /f %%b in ('mountvol %%a: /l') do (
      call :job %%a %%fulldrv:~!n!,1%%: %%b
      set /a n+=1  
  )
)
pause
goto :EOF

:job
mountvol %1
shift
mountvol %*
goto :EOF

作者: victor888     时间: 2008-11-2 23:17
It doesn't work too.
作者: dikex     时间: 2008-11-2 23:51
剥离时漏了一些参数……
发现即使shift后,%*仍包括原来的%1……
下面的应该可以了,因为我不小心直接运行了一次,C卷装入点被删,偶的系统盘……系统立刻混乱了,要重启才恢复-_-
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set fulldrv=CDEFGHIJKLMNOPQRSTUVWXYZ
set neworder=C E F K X G
set /a n=0

for %%a in (%neworder%) do (
   for /f %%b in ('mountvol %%a: /l') do (
      call :job %%a %%fulldrv:~!n!,1%% %%b
      set /a n+=1  
  )
)
pause
goto :EOF

:job
mountvol %1: /d
mountvol %2: %3
pause
goto :EOF