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

[文本处理] [已解决]BAT代码如何批量处理,数据比较?

一个文件夹有多个文本,文本内容:1,1,583460,2726042
                                                2,1,583464,2726037
                                                3,1,583459,2726018
                                               ......
行数不等,想提取第三列所有数据跟999999进行比较,  
第三列所有数据大于999999的文本,放进一个新建文件夹
1

评分人数

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

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

TOP

回复 2# QIAOXINGXING


    好像没有实现功能,只是把文本复制到了提取,且提取里面的文本都为空

TOP

回复 3# 乱乱


  上传个附件,我测试下。。

TOP

回复 4# QIAOXINGXING


    已经上传了,数据都是大于999999

TOP

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

TOP

本帖最后由 乱乱 于 2012-10-17 20:02 编辑

回复 6# QIAOXINGXING


    试试看

TOP

回复 6# QIAOXINGXING


    嗯,我说的是第四列数据做比较。但还有点可能我没表达清楚。
我要的是,第四列的数,必须每一个都大于999999,有一个小于999999的
这个文本就不会被提取。

TOP

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

评分人数

TOP

批处理对浮点数很是蛋疼。。。
  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
复制代码
1

评分人数

TOP

回复 10# apang


    很好,谢谢

TOP

回复 9# QIAOXINGXING


    很好,谢谢

TOP

还有一个,就是我上传的文本,要是里面有几个文本是空的,里面没有内容,
我想用个批处理,生成一个错误信息文本,把空文本的文件名写进去

TOP

回复 13# 乱乱

不知道你所说的"内容为空"指啥,如果仅仅只有回车或空格也算"内容为空"?
这个与顶楼的要求两码事,还是另开一贴为好

TOP

好吧,那我另开一贴

TOP

返回列表