找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26309|回复: 9

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

[复制链接]
发表于 2011-10-9 21:47:09 | 显示全部楼层 |阅读模式
本帖最后由 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等命令获得以上想要的结果?

非常感谢!!
发表于 2011-10-9 22:43:50 | 显示全部楼层
把纯DOS换成不纯的CMD.
发表于 2011-10-9 23:19:22 | 显示全部楼层
估计纯批无解
发表于 2011-10-9 23:37:47 | 显示全部楼层
相关文件有,DOS下部支持F /F,有人问过了。
 楼主| 发表于 2011-10-10 00:23:22 | 显示全部楼层
回复 3# CrLf


   请问如何获得文本的总行数?
发表于 2011-10-11 14:03:01 | 显示全部楼层
回复 5# a262615704


    获取文件行数:
  1. @echo off
  2. find /c /v ""<文件名
复制代码
 楼主| 发表于 2011-10-12 08:17:10 | 显示全部楼层
回复 6# garyng


   请问这个行数的值怎么传给变量?记得是在纯DOS下。
发表于 2011-10-12 08:40:13 | 显示全部楼层
试试,估计实现不了
  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="
复制代码
发表于 2011-10-12 18:26:45 | 显示全部楼层
回复 7# a262615704


    那我就不知咯~
    没用过纯DOS~
    开始接触电脑是时WIN XP的~
发表于 2011-10-14 23:22:36 | 显示全部楼层
本帖最后由 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代工企业里测试才发挥用处。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 07:21 , Processed in 0.020031 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表