Board logo

标题: 批处理中能否定义数组? [打印本页]

作者: qdcr     时间: 2006-6-22 16:24    标题: 批处理中能否定义数组?

遇到如下的一个需求:
解析文件中的每一行,希望使用变量将文件中的每一行保存起来,因为不知道文件中有多少行,所以变量个数是动态的。请问怎么解决这种问题,谢谢
作者: kcdsw     时间: 2006-6-22 16:45
好像不行吧
作者: namejm     时间: 2006-6-22 22:50
  好象CMD中变量的个数是有限制的吧?好象和内存有关系来着?

  另外,如果要把每一行保存起来,那么,你想解决什么问题呢?或许说出来之后,大家帮你想想办法,没必要用那么多的变量呢。既然提到了解析文件,那么,for语句应该派得上用场。
作者: qdcr     时间: 2006-6-23 13:40
谢谢,是这样的一个需求:
文件中每一行记录一个软件名称,程序首先要求用户输入每个软件的安装目录,并验证用户输入的路径是否有效,全部都有效的话,才继续在用户输入的各个目录下建立一个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 ]
作者: qdcr     时间: 2006-6-23 16:13
自己顶一下
作者: 3742668     时间: 2006-6-23 17:48
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
在最后,还是想说的是:用批处理来处理文本内容的时候还是很麻烦的,上面的脚本并没有做更多的出错检测及处理。当文本文件的内容中包含有&,|,&&,||等特殊字符时,还是很可能引起错误的,如果你的要求比较高可以自己尝试加入一些判断并处理错误的语句。
作者: fykenny     时间: 2008-12-31 16:40
哈哈,好东西,学习了.版主真厉害