中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 如何嵌套变量 上一主题 | 下一主题
wjh6088
初级用户





积分 85
发帖 39
注册 2007-6-28
状态 离线
『楼 主』:  如何嵌套变量

本文里的1都是数字1,不是字母
写一个批处理,要用到变量嵌套(是这样说的吗?),例如一个变量是g1,g2,g3,g4,g5.....,已经赋值好了,另外一个是%1
%1是个序列,分别取值1,2,3,4......最后数值不定,根据执行的结果而变
现在的问题是我要依次显示 %g%1%,但它不是出 %g1%的值,我试过好多%%%g%%%1..等都不行
嗨,说不清楚,有空的,帮看一下源程序吧,卡在最后那行了,比较g1变量和g2变量的前16位的值,下一步要依次g1与g3.g4.g5....比较,看了论坛的精华帖,但是看不懂啊
在这里能就具体问题指个出路就满足了,不敢奢望能全懂
先谢谢了
初次发帖,如有错误,请各位指正
@echo off
color 2e
:清除上次用过的文件
attrib -s -r -h %temp%\*.ttt 2>nul
del  %temp%\*.ttt 2>nul
:确定可写盘的盘符
SET TestFile=Test_%RANDOM%.TMP
SETLOCAL ENABLEDELAYEDEXPANSION
For %%I In (C D E F G H I J K L M N O P Q R S T U V W X Y Z) Do (
CD.>%%I:\%TestFile%
cls&&If Exist %%I:\%TestFile% echo %%I >>%temp%\pflist.ttt&&DEL %%I:\%TestFile% /Q
)ECHO   当前可写的盘符列表如下
type %temp%\pflist.ttt
:搜索根目录下的gho文件
echo 正在搜索根目录下的gho文件
for /f %%i in (%temp%\pflist.ttt) do (
for /f "delims=$$$" %%I in ('dir /b /a-d /o-d "%%i:\*.gho"  2^>nul') do (echo %%i:\%%I >>%temp%\list.ttt
  )
)
echo 根目录下的gho文件清单如下
echo ####################################################
type %temp%\list.ttt
echo ####################################################
:搜索次级目录下的gho文件
echo 正在搜索次级目录下的gho文件
for /f  %%o in (%temp%\pflist.ttt) do (
for /f  "skip=5 tokens=4*" %%i in ('dir /x /ad %%o:\') DO (
for /f  "delims=$$$" %%a in ('dir /b /a-d /o-d "%%o:\%%i\*.gho"  2^>nul') do echo %%o:\%%i\%%a >>%temp%\list.ttt
  )
)

for /f "delims=[]" %%i in ('find /n /i ".gho" %temp%\list.ttt') do (set 文件数=%%i)
for /f "delims=" %%j in (%temp%\list.ttt) do echo %%~dptznxj>>%temp%\listfinish.ttt
set 跳过行数=0
set 变量名序号=1
for /f "delims=$$$$$" %%i in (%temp%\listfinish.ttt) do (set g1=%%i)&&(goto 递增)
:递增
set /a 跳过行数=%跳过行数%+1
set /a 变量名序号=%变量名序号%+1
if %跳过行数%==%文件数% goto :序列
call :赋值 %变量名序号%
:赋值
for /f "skip=%跳过行数% delims=$$$$$" %%i in (%temp%\listfinish.ttt) do (set g%1=%%i)&&(goto 递增)

:序列
for /l %%i in (1,1,%文件数%) do call :赋值完毕 %%i
:赋值完毕
IF "%g1:~0,16%" LEQ "%%%%g%%%1:~0,16%" (echo 456) else (echo 123)
pause
[ Last edited by bjsh on 2007-7-31 at 12:42 AM ]

2007-6-29 23:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wjh6088
初级用户





积分 85
发帖 39
注册 2007-6-28
状态 离线
『第 2 楼』:  

不知道该高兴还是伤感?
没人理会,说明咱的水平高,没人答上来
还是水平太低,不屑一顾,表达不清?

2007-7-2 12:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dikex
高级用户

潜水修练批处理



积分 788
发帖 366
注册 2006-12-31
状态 离线
『第 3 楼』:  

这样嵌套看得人迷糊,系统执行时也跟着迷糊……

看看是不是这样:

:序列
for /l %%i in (1,1,%文件数%) do call :赋值完毕 %%i
rem 这里没有跳转之类的,执行玩上面会接着执行下面的哦
:赋值完毕
call set str=%%g%1%%
IF "%g1:~0,16%" LEQ "%str:~0,16%" (echo 456) else (echo 123)
pause



正在潜水修练的批处理小白
2007-7-2 13:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wjh6088
初级用户





积分 85
发帖 39
注册 2007-6-28
状态 离线
『第 4 楼』:  

ok了,谢谢,能达到目的
这似乎是转了个弯,没有直接解决问题

[ Last edited by wjh6088 on 2007-7-2 at 01:42 PM ]

2007-7-2 13:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
koala
初级用户

Batchs上議院參議長


积分 199
发帖 105
注册 2007-6-5
来自 江苏
状态 离线
『第 5 楼』:  

最近正在学习 dos和c嵌套式语句
学习一下楼主




『生如夏花之绚烂
   死若秋叶之静美』 dos做到了
2007-7-26 19:29
查看资料  发送邮件  发短消息 网志  OICQ (13019940)  编辑帖子  回复  引用回复
chenall
银牌会员




积分 1276
发帖 469
注册 2002-12-23
来自 福建泉州
状态 离线
『第 6 楼』:  

使用变量延缓扩展.
:序列
for /l %%i in (1,1,%文件数%) do call :赋值完毕 %%i
:赋值完毕
setlocal ENABLEDELAYEDEXPANSION
IF "%g1:~0,16%" LEQ "!g1%:~0,16!" (echo 456) else (echo 123)
setlocal DISABLEDELAYEDEXPANSION
pause




QQ:366840202
http://chenall.net
2007-7-26 21:22
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (366840202)  编辑帖子  回复  引用回复
koala
初级用户

Batchs上議院參議長


积分 199
发帖 105
注册 2007-6-5
来自 江苏
状态 离线
『第 7 楼』:  

嵌套的语句是考验一个程序员逻辑思维的试金石,
使用给了8个    if  ------else 语句 饶的我头疼的要命,
气的只想拿猫砸自己的头脑!!!
反问自己。我怎么学了这个该死的东西。
不过我还是挺喜欢用嵌套语句的



『生如夏花之绚烂
   死若秋叶之静美』 dos做到了
2007-8-21 18:24
查看资料  发送邮件  发短消息 网志  OICQ (13019940)  编辑帖子  回复  引用回复

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


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



论坛跳转: