中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-07-19 07:56
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结,谢谢dikex]变量嵌套问题 查看 812 回复 10
楼 主 [已结,谢谢dikex]变量嵌套问题 发表于 2008-11-01 21:46 ·  中国 吉林 长春 电信
初级用户
积分 50
发帖 40
注册 2008-01-14 05:56
18年会员
UID 108541
性别 男
状态 离线
前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 ]
2 发表于 2008-11-01 22:57 ·  中国 贵州 黔西南布依族苗族自治州 兴义市 电信
银牌会员
★★★
积分 2,098
发帖 566
注册 2007-09-11 07:27
18年会员
UID 97070
性别 男
状态 离线
call echo %%str2:~!n!,1%%
3 发表于 2008-11-01 23:20 ·  中国 吉林 长春 电信
初级用户
积分 50
发帖 40
注册 2008-01-14 05:56
18年会员
UID 108541
性别 男
状态 离线
楼上的,我要的不是ECHO命令,实际上是MOUNTVOL命令,NT系统都有这个。
4 发表于 2008-11-02 00:13 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
怎么个依次法?
最终结果是什么
简单!简单!再简单!
5 发表于 2008-11-02 08:40 ·  中国 吉林 长春 电信
初级用户
积分 50
发帖 40
注册 2008-01-14 05:56
18年会员
UID 108541
性别 男
状态 离线

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%%取不到值。

谢谢!
6 发表于 2008-11-02 18:31 ·  中国 吉林 长春 电信
初级用户
积分 50
发帖 40
注册 2008-01-14 05:56
18年会员
UID 108541
性别 男
状态 离线
没人能解决吗?
7 发表于 2008-11-02 21:44 ·  中国 广东 广州 天河区 电信
高级用户
★★★
潜水修练批处理
积分 788
发帖 366
注册 2006-12-31 02:43
19年会员
UID 75048
性别 男
状态 离线
尝试
call mountvol %%fulldrv:~!n!,1%%: %%b
正在潜水修练的批处理小白
8 发表于 2008-11-02 22:34 ·  中国 吉林 长春 电信
初级用户
积分 50
发帖 40
注册 2008-01-14 05:56
18年会员
UID 108541
性别 男
状态 离线
楼上的兄弟,这个命令我也尝试了,不行。
我还尝试了 call echo "%%fulldrv:~!n!,1%%: %%b |mountvol.exe"
也不行。
9 发表于 2008-11-02 22:44 ·  中国 广东 广州 天河区 电信
高级用户
★★★
潜水修练批处理
积分 788
发帖 366
注册 2006-12-31 02:43
19年会员
UID 75048
性别 男
状态 离线
试试这个,把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
正在潜水修练的批处理小白
10 发表于 2008-11-02 23:17 ·  中国 吉林 长春 电信
初级用户
积分 50
发帖 40
注册 2008-01-14 05:56
18年会员
UID 108541
性别 男
状态 离线
It doesn't work too.
11 发表于 2008-11-02 23:51 ·  中国 广东 广州 天河区 电信
高级用户
★★★
潜水修练批处理
积分 788
发帖 366
注册 2006-12-31 02:43
19年会员
UID 75048
性别 男
状态 离线
剥离时漏了一些参数……
发现即使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
正在潜水修练的批处理小白
论坛跳转: