|
victor888
初级用户
积分 50
发帖 40
注册 2008-1-14
状态 离线
|
『楼 主』:
[已结,谢谢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 ]
|
|
2008-11-1 21:46 |
|
|
s11ss
银牌会员
积分 2098
发帖 566
注册 2007-9-11
状态 离线
|
『第
2 楼』:
call echo %%str2:~!n!,1%%
|
|
2008-11-1 22:57 |
|
|
victor888
初级用户
积分 50
发帖 40
注册 2008-1-14
状态 离线
|
『第
3 楼』:
楼上的,我要的不是ECHO命令,实际上是MOUNTVOL命令,NT系统都有这个。
|
|
2008-11-1 23:20 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
4 楼』:
怎么个依次法?
最终结果是什么
|
简单!简单!再简单! |
|
2008-11-2 00:13 |
|
|
victor888
初级用户
积分 50
发帖 40
注册 2008-1-14
状态 离线
|
『第
5 楼』:
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%%取不到值。
谢谢!
|
|
2008-11-2 08:40 |
|
|
victor888
初级用户
积分 50
发帖 40
注册 2008-1-14
状态 离线
|
|
2008-11-2 18:31 |
|
|
dikex
高级用户
潜水修练批处理
积分 788
发帖 366
注册 2006-12-31
状态 离线
|
『第
7 楼』:
尝试
call mountvol %%fulldrv:~!n!,1%%: %%b
|
正在潜水修练的批处理小白 |
|
2008-11-2 21:44 |
|
|
victor888
初级用户
积分 50
发帖 40
注册 2008-1-14
状态 离线
|
『第
8 楼』:
楼上的兄弟,这个命令我也尝试了,不行。
我还尝试了 call echo "%%fulldrv:~!n!,1%%: %%b |mountvol.exe"
也不行。
|
|
2008-11-2 22:34 |
|
|
dikex
高级用户
潜水修练批处理
积分 788
发帖 366
注册 2006-12-31
状态 离线
|
『第
9 楼』:
试试这个,把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
|
正在潜水修练的批处理小白 |
|
2008-11-2 22:44 |
|
|
victor888
初级用户
积分 50
发帖 40
注册 2008-1-14
状态 离线
|
『第
10 楼』:
It doesn't work too.
|
|
2008-11-2 23:17 |
|
|
dikex
高级用户
潜水修练批处理
积分 788
发帖 366
注册 2006-12-31
状态 离线
|
『第
11 楼』:
剥离时漏了一些参数……
发现即使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
|
正在潜水修练的批处理小白 |
|
2008-11-2 23:51 |
|