中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 批处理中能否定义数组? 上一主题 | 下一主题
qdcr
初级用户





积分 120
发帖 32
注册 2006-6-19
状态 离线
『楼 主』:  批处理中能否定义数组?

遇到如下的一个需求:
解析文件中的每一行,希望使用变量将文件中的每一行保存起来,因为不知道文件中有多少行,所以变量个数是动态的。请问怎么解决这种问题,谢谢

2006-6-22 16:24
查看资料  发短消息 网志   编辑帖子
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『第 2 楼』:  

好像不行吧

2006-6-22 16:45
查看资料  发短消息 网志   编辑帖子
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 3 楼』:  

  好象CMD中变量的个数是有限制的吧?好象和内存有关系来着?

  另外,如果要把每一行保存起来,那么,你想解决什么问题呢?或许说出来之后,大家帮你想想办法,没必要用那么多的变量呢。既然提到了解析文件,那么,for语句应该派得上用场。

2006-6-22 22:50
查看资料  发短消息 网志   编辑帖子
qdcr
初级用户





积分 120
发帖 32
注册 2006-6-19
状态 离线
『第 4 楼』:  

谢谢,是这样的一个需求:
文件中每一行记录一个软件名称,程序首先要求用户输入每个软件的安装目录,并验证用户输入的路径是否有效,全部都有效的话,才继续在用户输入的各个目录下建立一个backup的文件夹。
请注意:用户先进行软件安装路径的输入,然后进行一个完全的per-check,用户输入的路径都有效,才在用户输入的各个安装路径中进行创建backup文件夹的动作。
比如:文件中记录:
MSN
QQ

请输入MSN的安装路径: C:\program files\MSN
验证是否有效
请输入QQ的安装路径: C:\program files\QQ
验证是否有效

都有效--->在MSN 和 QQ的安装目录下创建backup文件夹。

难点在于:文件中包含的软件个数是不定的,必须遍历,而且必须记录用户输入的各个软件的安装路径。
请教各位大侠

[ Last edited by qdcr on 2006-6-23 at 13:51 ]

2006-6-23 13:40
查看资料  发短消息 网志   编辑帖子
qdcr
初级用户





积分 120
发帖 32
注册 2006-6-19
状态 离线
『第 5 楼』:  

自己顶一下

2006-6-23 16:13
查看资料  发短消息 网志   编辑帖子
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 6 楼』:  

Well,qdcr可能考虑得太复杂了吧,在这个例子中其实并不需要把文件每一行的内容保存下来,只需要简单地使用for语句的文本处理方面的功能似乎就可以完成任务了:
@echo off
for /f %%i in (list.txt) do  call :dosomething "%%i"
echo 开始创建目录...
for %%m in (%strAll%) do md %%m\backup
pause
goto :eof

:dosomething
    set /p str=输入 %1 的目录:
    if "%str%" == "" goto error
    dir %str% >nul 2>nul || goto :error
    set strAll=%strAll% "%str%"
goto :eof

:error
   echo 目录不存在!
   echo 按任意键退出...
   pause>nul
   exit
goto :eof
当然,在批处理中将文件每行的内容都保存下来也不是不行:
@echo off
for /f "delims=: tokens=1,2*" %%i in ('"findstr /n . list.txt"') do set %%i=%%j && set num=%%i
setlocal ENABLEDELAYEDEXPANSION
for /l %%l in (1,1,%num%) do  call :dosomething "!%%l!"
echo 开始创建目录...
for %%m in (%strAll%) do md %%m\backup
pause
goto :eof

:dosomething
    set /p str=输入 %1 的目录:
    if "%str%" == "" goto error
    dir %str% >nul 2>nul || goto :error
    set strAll=%strAll% "%str%"
goto :eof

:error
   echo 目录不存在!
   echo 按任意键退出...
   pause>nul
   exit
goto :eof
在最后,还是想说的是:用批处理来处理文本内容的时候还是很麻烦的,上面的脚本并没有做更多的出错检测及处理。当文本文件的内容中包含有&,|,&&,||等特殊字符时,还是很可能引起错误的,如果你的要求比较高可以自己尝试加入一些判断并处理错误的语句。

2006-6-23 17:48
查看资料  发送邮件  发短消息 网志   编辑帖子
fykenny
新手上路





积分 1
发帖 1
注册 2008-12-1
状态 离线
『第 7 楼』:  

哈哈,好东西,学习了.版主真厉害

2008-12-31 16:40
查看资料  发送邮件  发短消息 网志   编辑帖子

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


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



论坛跳转: