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

[文本处理] [已解决]请教批处理如何提取这个文本?

[复制链接]
发表于 2011-10-9 06:30:49 | 显示全部楼层 |阅读模式
本帖最后由 a262615704 于 2011-10-9 21:53 编辑

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
Disk: 3 (3.89GB) M:[Ut165 USB Flash Disk 0.00]
    2.1: (   3.88GB) [j:\] Active Volume NTFS l:[时尚]
         (   6.33MB) Unused Space


请教如何用批处理显示如下:
磁盘数量:3
磁盘1的容量:149.05GB
磁盘2的容量:7.50GB
磁盘3的容量:3.89GB

非常感谢!!!

评分

参与人数 1PB +2 收起 理由
CrLf + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-10-9 09:15:09 | 显示全部楼层

  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. Set Volue=0
  3. For /F "tokens=1-10 delims=:() " %%A In (Info.txt) Do (
  4.         IF /i "%%A" == "Disk" (
  5.                 Set /A Volue+=1
  6.                 Set Info!Volue!=磁盘%%B的容量是%%C       
  7.         )
  8. )
  9. Echo 磁盘总数是%Volue%
  10. For /L %%A In (1,1,%Volue%) Do (
  11.         Echo !Info%%A!
  12. )
  13. Pause>Nul
复制代码
你这个题,应该会得到很多种思路的。
我这个只是其中一种.
如果不是要求先显示出 磁盘数量的话 将会更简单.

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

发表于 2011-10-9 09:47:14 | 显示全部楼层
  1. gawk -F[()] "/Disk:/{n+=1;a[n]=$2}END{print "磁盘数量:"n;for(i=1;i<=n;i++)print "磁盘"i"的容量:"a[i]}" info.txt | more
复制代码
发表于 2011-10-9 09:47:45 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=2 delims=:()" %%i in ('findstr "^Disk:" info.txt') do set disk=%%i
  3. echo 磁盘数量:%disk%
  4. for /f "tokens=2,3 delims=:()" %%i in ('findstr "^Disk:" info.txt') do echo.磁盘%%i的容量:%%j
  5. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

发表于 2011-10-9 10:44:35 | 显示全部楼层
  1. gawk -F"[() ]" "/Disk:/{n=$2;a[n]=$4}END{print "磁盘数量:"n;for(i=1;i<=n;i++)print "磁盘"i"的容量:"a[i]}" info.txt | more
复制代码
发表于 2011-10-9 11:00:54 | 显示全部楼层
回复 5# awk


请问 -F[()]   这里[]起什么作用?我测试如果不要则无法用()分隔
发表于 2011-10-9 11:40:37 | 显示全部楼层
回复 6# FOR


类似于批处理for命令里面的delims=()
你懂的
发表于 2011-10-9 12:01:03 | 显示全部楼层
回复 7# awk

指定多个分隔符的时候必须用 [] 括起来吗?
这个和 delims=() 还是有区别的
比如:abcd()1234
发表于 2011-10-9 12:02:42 | 显示全部楼层
  1. @echo off&Setlocal EnableDelayedExpansion
  2. For /f "tokens=1,2 delims=()" %%i in ('Findstr /i "disk" 1.txt') do (
  3.         Set /a n+=1
  4.         Echo %%i 容量 %%j
  5.         )
  6.         echo 合计磁盘数:!n!
  7. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

发表于 2011-10-9 13:43:38 | 显示全部楼层
回复 8# FOR


你所知道的区别主要有哪些?
 楼主| 发表于 2011-10-9 15:52:47 | 显示全部楼层
回复 2# 冷玉公子


   请问我把依据出现”Disk: “做为判断磁盘总数,代码如何实现,因为有可能会出现”Disk“在其它地方。谢谢
发表于 2011-10-9 16:07:08 | 显示全部楼层
回复 11# a262615704
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1-3 delims=() " %%a in (info.txt) do (
  4.     if "%%a" == "Disk:" (
  5.         set /a value+=1
  6.         set info!value!=磁盘%%b的容量是%%c
  7.     )
  8. )
  9. echo 磁盘总数是%value%
  10. for /l %%a in (1,1,%value%) do (
  11.     echo !info%%a!
  12. )
  13. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-10-9 16:26:17 | 显示全部楼层
回复 12# awk


   请问如何把磁盘顺序和容量大小分别赋值给变量,方便后面做为比较容量大小?
想要得到的结果显示如下:
磁盘A,容易为X
磁盘B,容易为Y
磁盘C,容量为Z
磁盘A的容量最大
发表于 2011-10-9 16:40:07 | 显示全部楼层
回复 10# awk

abcd()1234
用 delims=()  1234为第二列
用 gawk -F [()] 1234 为第三列
发表于 2011-10-9 17:28:27 | 显示全部楼层
本帖最后由 CrLf 于 2011-10-9 17:29 编辑

如此特殊的文本,为什么没人用 eol...
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "eol= tokens=2 delims=()" %%a in (info.txt) do (
  3.    set /a n+=1
  4.    set disk!n!=%%a
  5. )
  6. echo 磁盘数量:%n%
  7. for /l %%a in (1 1 %n%) do echo 磁盘%%a的容量是!disk%%a!
  8. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 04:33 , Processed in 0.022685 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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