中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结,谢谢dikex]变量嵌套问题
作者:
标题: [已结,谢谢dikex]变量嵌套问题 上一主题 | 下一主题
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
状态 离线
『第 6 楼』:  

没人能解决吗?

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
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: