标题: [文本处理] [已解决]请教批处理如何提取这个文本? [打印本页]
作者: a262615704 时间: 2011-10-9 06:30 标题: [已解决]请教批处理如何提取这个文本?
本帖最后由 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
非常感谢!!!
作者: 冷玉公子 时间: 2011-10-9 09:15
- @Echo Off&SetLocal EnableDelayedExpansion
- Set Volue=0
- For /F "tokens=1-10 delims=:() " %%A In (Info.txt) Do (
- IF /i "%%A" == "Disk" (
- Set /A Volue+=1
- Set Info!Volue!=磁盘%%B的容量是%%C
- )
- )
- Echo 磁盘总数是%Volue%
- For /L %%A In (1,1,%Volue%) Do (
- Echo !Info%%A!
- )
- Pause>Nul
复制代码
你这个题,应该会得到很多种思路的。
我这个只是其中一种.
如果不是要求先显示出 磁盘数量的话 将会更简单.
作者: awk 时间: 2011-10-9 09:47
- gawk -F[()] "/Disk:/{n+=1;a[n]=$2}END{print \"磁盘数量:\"n;for(i=1;i<=n;i++)print \"磁盘\"i\"的容量:\"a[i]}" info.txt | more
复制代码
作者: 601997526 时间: 2011-10-9 09:47
- @echo off
- for /f "tokens=2 delims=:()" %%i in ('findstr "^Disk:" info.txt') do set disk=%%i
- echo 磁盘数量:%disk%
- for /f "tokens=2,3 delims=:()" %%i in ('findstr "^Disk:" info.txt') do echo.磁盘%%i的容量:%%j
- pause
复制代码
作者: awk 时间: 2011-10-9 10:44
- gawk -F"[() ]" "/Disk:/{n=$2;a[n]=$4}END{print \"磁盘数量:\"n;for(i=1;i<=n;i++)print \"磁盘\"i\"的容量:\"a[i]}" info.txt | more
复制代码
作者: FOR 时间: 2011-10-9 11:00
回复 5# awk
请问 -F[()] 这里[]起什么作用?我测试如果不要则无法用()分隔
作者: awk 时间: 2011-10-9 11:40
回复 6# FOR
类似于批处理for命令里面的delims=()
你懂的
作者: FOR 时间: 2011-10-9 12:01
回复 7# awk
指定多个分隔符的时候必须用 [] 括起来吗?
这个和 delims=() 还是有区别的
比如:abcd()1234
作者: Hello123World 时间: 2011-10-9 12:02
- @echo off&Setlocal EnableDelayedExpansion
- For /f "tokens=1,2 delims=()" %%i in ('Findstr /i "disk" 1.txt') do (
- Set /a n+=1
- Echo %%i 容量 %%j
- )
- echo 合计磁盘数:!n!
- pause
复制代码
作者: awk 时间: 2011-10-9 13:43
回复 8# FOR
你所知道的区别主要有哪些?
作者: a262615704 时间: 2011-10-9 15:52
回复 2# 冷玉公子
请问我把依据出现”Disk: “做为判断磁盘总数,代码如何实现,因为有可能会出现”Disk“在其它地方。谢谢
作者: awk 时间: 2011-10-9 16:07
回复 11# a262615704 - @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1-3 delims=() " %%a in (info.txt) do (
- if "%%a" == "Disk:" (
- set /a value+=1
- set info!value!=磁盘%%b的容量是%%c
- )
- )
- echo 磁盘总数是%value%
- for /l %%a in (1,1,%value%) do (
- echo !info%%a!
- )
- pause
复制代码
作者: a262615704 时间: 2011-10-9 16:26
回复 12# awk
请问如何把磁盘顺序和容量大小分别赋值给变量,方便后面做为比较容量大小?
想要得到的结果显示如下:
磁盘A,容易为X
磁盘B,容易为Y
磁盘C,容量为Z
磁盘A的容量最大
作者: FOR 时间: 2011-10-9 16:40
回复 10# awk
abcd()1234
用 delims=() 1234为第二列
用 gawk -F [()] 1234 为第三列
作者: CrLf 时间: 2011-10-9 17:28
本帖最后由 CrLf 于 2011-10-9 17:29 编辑
如此特殊的文本,为什么没人用 eol...- @echo off&setlocal enabledelayedexpansion
- for /f "eol= tokens=2 delims=()" %%a in (info.txt) do (
- set /a n+=1
- set disk!n!=%%a
- )
- echo 磁盘数量:%n%
- for /l %%a in (1 1 %n%) do echo 磁盘%%a的容量是!disk%%a!
- pause
复制代码
作者: awk 时间: 2011-10-9 18:25
回复 14# FOR
是的,这一点初学者很容易混淆。
还有一点区别就是-F可以用字符串做列分隔符,但是delims不行。
作者: FOR 时间: 2011-10-10 03:07
回复 16# awk
多谢你的指点,实在很想学 gawk 可是奈何电脑不争气,你的这个代码我下午测试还是正常,现在又不行了,郁闷。
现在出问题都不知道到底是写错了还是 gawk 程序问题- gawk -F\" "{print $1}" a.txt
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |