标题: [文本处理] [已解决]BAT代码如何批量处理,数据比较? [打印本页]
作者: 乱乱 时间: 2012-10-16 21:55 标题: [已解决]BAT代码如何批量处理,数据比较?
一个文件夹有多个文本,文本内容:1,1,583460,2726042
2,1,583464,2726037
3,1,583459,2726018
......
行数不等,想提取第三列所有数据跟999999进行比较,
第三列所有数据大于999999的文本,放进一个新建文件夹
作者: QIAOXINGXING 时间: 2012-10-16 23:41
- @echo off&SetLocal EnableDelayEdexpansion&cd /d "%~dp0"
- md 提取\
- for %%i in (*.txt) do (
- (for /f "tokens=1-3 delims=," %%a in (%%~si) do (
- if %%c gtr 999999 echo %%c
- ))>"提取\%%~nxi"
- )
- pause
复制代码
作者: 乱乱 时间: 2012-10-17 13:19
回复 2# QIAOXINGXING
好像没有实现功能,只是把文本复制到了提取,且提取里面的文本都为空
作者: QIAOXINGXING 时间: 2012-10-17 15:00
回复 3# 乱乱
上传个附件,我测试下。。
作者: 乱乱 时间: 2012-10-17 15:44
回复 4# QIAOXINGXING
已经上传了,数据都是大于999999
作者: QIAOXINGXING 时间: 2012-10-17 17:25
回复 QIAOXINGXING
已经上传了,数据都是大于999999
乱乱 发表于 2012-10-17 15:44
你的数据是:- J1,1,582697.464,2637467.157,0.0
- J2,1,582698.773,2637463.750,0.0
- J3,1,582700.214,2637460.870,0.0
- J4,1,582704.058,2637460.150,0.0
- J5,1,582711.986,2637457.510,0.0
- J6,1,582718.713,2637453.670,0.0
- J7,1,582719.194,2637449.830,0.0
- J8,1,582718.954,2637444.070,0.0
复制代码
大于999999的应该是第四列吧??
二楼代码不成功,因为数据是小数。批处理不支持小数。- @echo off&SetLocal EnableDelayEdexpansion&cd /d "%~dp0"
- md 提取\
- for %%i in (*.txt) do (
- (for /f "tokens=1-4 delims=," %%a in (%%~si) do (
- for /f "tokens=1-2 delims=." %%i in ("%%d") do (
- if %%i gtr 99999 echo %%i.%%j
- )
- ))>"提取\%%~nxi"
- )
- pause
复制代码
这里是和第四列作比较,如果要和第三列比较,把第五行的%%d改成%%c。
作者: 乱乱 时间: 2012-10-17 20:01
本帖最后由 乱乱 于 2012-10-17 20:02 编辑
回复 6# QIAOXINGXING
试试看
作者: 乱乱 时间: 2012-10-17 20:08
回复 6# QIAOXINGXING
嗯,我说的是第四列数据做比较。但还有点可能我没表达清楚。
我要的是,第四列的数,必须每一个都大于999999,有一个小于999999的
这个文本就不会被提取。
作者: QIAOXINGXING 时间: 2012-10-17 21:44
回复 8# 乱乱
你的意思是:如果第四列都大于99999,就把这个文件复制到“提取”文件夹里??- @echo off&SetLocal EnableDelayEdexpansion&cd /d "%~dp0"
- md 提取\
- for %%i in (*.txt) do (
- set "flag="
- for /f "tokens=1-4 delims=," %%a in (%%~si) do (
- for /f "tokens=1-2 delims=." %%i in ("%%d") do (
- if %%i leq 999999 set "flag=1"
- )
- )
- if not defined flag copy %%~si "提取\"
- )
- pause
复制代码
作者: apang 时间: 2012-10-17 22:26
批处理对浮点数很是蛋疼。。。- @echo off
- md New 2>nul
- for /f "delims=" %%a in ('dir /b *.txt') do (
- for /f "usebackq tokens=4 delims=," %%b in ("%%a") do (
- if "%%b" equ "999999.000" set flag=1
- if %%~nb leq 999999 set flag=1
- )
- if defined flag (set "flag=") else Copy "%%a" "New\"
- )
- pause
复制代码
作者: 乱乱 时间: 2012-10-18 19:42
回复 10# apang
很好,谢谢
作者: 乱乱 时间: 2012-10-18 19:43
回复 9# QIAOXINGXING
很好,谢谢
作者: 乱乱 时间: 2012-10-18 19:45
还有一个,就是我上传的文本,要是里面有几个文本是空的,里面没有内容,
我想用个批处理,生成一个错误信息文本,把空文本的文件名写进去
作者: apang 时间: 2012-10-18 20:17
回复 13# 乱乱
不知道你所说的"内容为空"指啥,如果仅仅只有回车或空格也算"内容为空"?
这个与顶楼的要求两码事,还是另开一贴为好
作者: 乱乱 时间: 2012-10-18 21:34
好吧,那我另开一贴
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |