[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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

非常感谢!!!
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2

  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

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

  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
复制代码

TOP

  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

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

  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
复制代码

TOP

回复 5# awk


请问 -F[()]   这里[]起什么作用?我测试如果不要则无法用()分隔

TOP

回复 6# FOR


类似于批处理for命令里面的delims=()
你懂的

TOP

回复 7# awk

指定多个分隔符的时候必须用 [] 括起来吗?
这个和 delims=() 还是有区别的
比如:abcd()1234

TOP

  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

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

回复 8# FOR


你所知道的区别主要有哪些?

TOP

回复 2# 冷玉公子


   请问我把依据出现”Disk: “做为判断磁盘总数,代码如何实现,因为有可能会出现”Disk“在其它地方。谢谢

TOP

回复 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

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

回复 12# awk


   请问如何把磁盘顺序和容量大小分别赋值给变量,方便后面做为比较容量大小?
想要得到的结果显示如下:
磁盘A,容易为X
磁盘B,容易为Y
磁盘C,容量为Z
磁盘A的容量最大

TOP

回复 10# awk

abcd()1234
用 delims=()  1234为第二列
用 gawk -F [()] 1234 为第三列

TOP

本帖最后由 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
复制代码

TOP

返回列表