Board logo

标题: [文本处理] 纯DOS下不能使用for的/f /l等参数,请问如何解决 [打印本页]

作者: a262615704    时间: 2011-10-9 21:47     标题: 纯DOS下不能使用for的/f /l等参数,请问如何解决

本帖最后由 a262615704 于 2011-10-9 21:49 编辑

info.txt保存了两块磁盘的信息,内容如下:
Disk: 1 (149.05GB) M:[WDC WD1600AAJS-22PSA0] S:[WD-WCAP91806016]
    1.1: (  10.01GB) [G:\] Active Volume NTFS l:[GO7]
    1.2: (  18.94GB) [D:\] Volume NTFS l:[PAGE]
    1.3: ( 100.09GB) [E:\] Volume NTFS l:[DATA]
    1.4: (     10GB) [F:\] Volume NTFS l:[WIN7]
    1.5: (     10GB) [C:\] Volume NTFS l:[WINXP]
         (   2.49MB) Unused Space
Disk: 2 (7.50GB) M:[Ut165 USB Flash Disk 0.00]
    2.1: (   7.49GB) [I:\] Active Volume NTFS l:[时尚蛤蟆]
         (   6.33MB) Unused Space

  1. setlocal enabledelayedexpansion
  2. for /f "tokens=1-3 delims=() " %%a in (info.txt) do (
  3.     if "%%a" == "Disk:" (
  4.         set /a value+=1
  5.         set disk!value!=%%c
  6.         for /f "tokens=1-7 delims=() " %%a in (info.txt) do (
  7.              if "%%a" == "!value!.1:" (
  8.                 set par!value!=%%b
  9.                 set vol!value!=%%g
  10.             )
  11.         )
  12.     )
  13. )
  14. echo           磁盘数量:%value%
  15. echo.
  16. for /l %%a in (1,1,%value%) do (
  17.     if defined disk%%a (
  18.         echo      第 %%a 磁盘容量:!disk%%a!
  19.         if defined par%%a (
  20.             echo      第一分区 容量:!par%%a!
  21.             if defined  vol%%a (
  22.                 echo      第一分区 卷标:!vol%%a:~3,-1!
  23.             )
  24.         )
  25.         echo.
  26.     )
  27. )
  28. echo *********************************
  29. pause>nul
复制代码



在XP下运行结果:
  1. *********************************
  2.           磁盘数量:2
  3.      第 1 磁盘容量:149.05GB
  4.      第一分区 容量:10.01GB
  5.      第一分区 卷标:GO7
  6.      第 2 磁盘容量:7.50GB
  7.      第一分区 容量:7.49GB
  8.      第一分区 卷标:时尚蛤蟆
  9. *********************************
复制代码



但是,在纯DOS下,不能使用for的 /f 和 /l 等参数,会提示语法错误。

请问,在纯DOS下,如何通过find、findstr、set等命令获得以上想要的结果?

非常感谢!!

作者: cjiabing    时间: 2011-10-9 22:43

把纯DOS换成不纯的CMD.
作者: CrLf    时间: 2011-10-9 23:19

估计纯批无解
作者: cjiabing    时间: 2011-10-9 23:37

相关文件有,DOS下部支持F /F,有人问过了。
作者: a262615704    时间: 2011-10-10 00:23

回复 3# CrLf


   请问如何获得文本的总行数?
作者: garyng    时间: 2011-10-11 14:03

回复 5# a262615704


    获取文件行数:
  1. @echo off
  2. find /c /v ""<文件名
复制代码

作者: a262615704    时间: 2011-10-12 08:17

回复 6# garyng


   请问这个行数的值怎么传给变量?记得是在纯DOS下。
作者: CrLf    时间: 2011-10-12 08:40

试试,估计实现不了
  1. copy info.txt "&set lines="
  2. find /c /v "" "&set lines=">tmp.bat
  3. call tmp.bat
  4. echo %lines%
  5. del "&set lines="
复制代码

作者: garyng    时间: 2011-10-12 18:26

回复 7# a262615704


    那我就不知咯~
    没用过纯DOS~
    开始接触电脑是时WIN XP的~
作者: xudaweb    时间: 2011-10-14 23:22

本帖最后由 xudaweb 于 2011-10-14 23:29 编辑

回复 7# a262615704
  1. for /f %%i in ( 'findstr /n . info.txt ^| find /c /v ""' ) do (
  2. set count=%%i
  3. )
  4. echo %count%
  5. pause>nul
复制代码
之前也遇到过这个问题,想把文本的行数传递给变量,实在没办法就把for搬出来了...虽然看着很累赘,但是可以用。
纯DOS下怎么弄就不知道了,纯DOS现在好像只有notebook代工企业里测试才发挥用处。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2