找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29298|回复: 14

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

[复制链接]
发表于 2012-10-16 21:55:58 | 显示全部楼层 |阅读模式
一个文件夹有多个文本,文本内容:1,1,583460,2726042
                                                2,1,583464,2726037
                                                3,1,583459,2726018
                                               ......
行数不等,想提取第三列所有数据跟999999进行比较,  
第三列所有数据大于999999的文本,放进一个新建文件夹

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2012-10-16 23:41:31 | 显示全部楼层

  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:44 | 显示全部楼层
回复 2# QIAOXINGXING


    好像没有实现功能,只是把文本复制到了提取,且提取里面的文本都为空
发表于 2012-10-17 15:00:18 | 显示全部楼层
回复 3# 乱乱


  上传个附件,我测试下。。
 楼主| 发表于 2012-10-17 15:44:32 | 显示全部楼层
回复 4# QIAOXINGXING


    已经上传了,数据都是大于999999
发表于 2012-10-17 17:25:47 | 显示全部楼层
回复  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:42 | 显示全部楼层
本帖最后由 乱乱 于 2012-10-17 20:02 编辑

回复 6# QIAOXINGXING


    试试看
 楼主| 发表于 2012-10-17 20:08:03 | 显示全部楼层
回复 6# QIAOXINGXING


    嗯,我说的是第四列数据做比较。但还有点可能我没表达清楚。
我要的是,第四列的数,必须每一个都大于999999,有一个小于999999的
这个文本就不会被提取。
发表于 2012-10-17 21:44:58 | 显示全部楼层
回复 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技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2012-10-17 22:26:54 | 显示全部楼层
批处理对浮点数很是蛋疼。。。
  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技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2012-10-18 19:42:58 | 显示全部楼层
回复 10# apang


    很好,谢谢
 楼主| 发表于 2012-10-18 19:43:19 | 显示全部楼层
回复 9# QIAOXINGXING


    很好,谢谢
 楼主| 发表于 2012-10-18 19:45:46 | 显示全部楼层
还有一个,就是我上传的文本,要是里面有几个文本是空的,里面没有内容,
我想用个批处理,生成一个错误信息文本,把空文本的文件名写进去
发表于 2012-10-18 20:17:06 | 显示全部楼层
回复 13# 乱乱

不知道你所说的"内容为空"指啥,如果仅仅只有回车或空格也算"内容为空"?
这个与顶楼的要求两码事,还是另开一贴为好
 楼主| 发表于 2012-10-18 21:34:30 | 显示全部楼层
好吧,那我另开一贴
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 03:38 , Processed in 0.020875 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表