Board logo

标题: [文本处理] [已解决]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

  1. @echo off&SetLocal EnableDelayEdexpansion&cd /d "%~dp0"
  2. md 提取\
  3. for %%i in (*.txt) do (
  4.   (for /f "tokens=1-3 delims=," %%a in (%%~si) do (
  5.       if %%c gtr 999999 echo %%c
  6.   ))>"提取\%%~nxi"
  7. )
  8. 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



    你的数据是:
  1. J1,1,582697.464,2637467.157,0.0
  2. J2,1,582698.773,2637463.750,0.0
  3. J3,1,582700.214,2637460.870,0.0
  4. J4,1,582704.058,2637460.150,0.0
  5. J5,1,582711.986,2637457.510,0.0
  6. J6,1,582718.713,2637453.670,0.0
  7. J7,1,582719.194,2637449.830,0.0
  8. J8,1,582718.954,2637444.070,0.0
复制代码
大于999999的应该是第四列吧??

二楼代码不成功,因为数据是小数。批处理不支持小数。
  1. @echo off&SetLocal EnableDelayEdexpansion&cd /d "%~dp0"
  2. md 提取\
  3. for %%i in (*.txt) do (
  4.   (for /f "tokens=1-4 delims=," %%a in (%%~si) do (
  5.       for /f "tokens=1-2 delims=." %%i in ("%%d") do (
  6.         if %%i gtr 99999 echo %%i.%%j
  7.       )
  8.   ))>"提取\%%~nxi"
  9. )
  10. 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,就把这个文件复制到“提取”文件夹里??
  1. @echo off&SetLocal EnableDelayEdexpansion&cd /d "%~dp0"
  2. md 提取\
  3. for %%i in (*.txt) do (
  4.   set "flag="
  5.   for /f "tokens=1-4 delims=," %%a in (%%~si) do (
  6.       for /f "tokens=1-2 delims=." %%i in ("%%d") do (
  7.         if %%i leq 999999 set "flag=1"
  8.       )
  9.   )
  10.   if not defined flag copy %%~si "提取\"
  11. )
  12. pause
复制代码

作者: apang    时间: 2012-10-17 22:26

批处理对浮点数很是蛋疼。。。
  1. @echo off
  2. md New 2>nul
  3. for /f "delims=" %%a in ('dir /b *.txt') do (
  4.   for /f "usebackq tokens=4 delims=," %%b in ("%%a") do (
  5.     if "%%b" equ "999999.000" set flag=1
  6.     if %%~nb leq 999999 set flag=1
  7.   )
  8.   if defined flag (set "flag=") else Copy "%%a" "New\"
  9. )
  10. 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