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

[文本处理] 求助批处理CSV文件处理

[复制链接]
发表于 2021-11-27 12:05:27 | 显示全部楼层 |阅读模式
大神们,最近遇到一个难题,每天要做重复的工作,出现下面的问题,请帮忙看看能不能使用BAT处理,在此非常的感谢大家帮忙。

问题描述:(由于论坛无法上传附件,暂时使用文字代替,请谅解)(附件可以在下面链接中下载:链接:https://pan.baidu.com/s/19CwW7C4ICJV7GT8_buba5Q
提取码:21a6)

在CSV文件中,有三种情况:

第一种:如果查询到 “Component ID”这列中有“10:”这种字符,直接把10:去除,并把10 这个数字复制到 对应行的“Panel”中,并把处理好的文件复制到D盘123文件夹中
第二种:如果查询到 “Component ID”这列中没有“10:”这种字符,直接复制文件到D盘123文件夹中
第三种:如果查询到 “Component ID”这列中,某一行是空格的,直接跳过处理下一行

样本:
BARCODE        INDEX        DATE        S.TIME        E.TIME        CYCLE        JOB        RESULT        USER        LOTINFO        MACHINE        SIDE                                                                                               
ST2111231C6        16551        2021/11/23        18:14:57        18:15:04        7        T13756_BOT        GOOD                          KOHYOUNG        B                                                                                               
PAD ID        Component ID        Volume(%)        Height(mil)        Area(%)        Result        Barcode        OffsetX(mil)        OffsetY(mil)        Array        Panel        Volume(mil3)        Area(mil2)        OffsetX(%)        OffsetY(%)        PinNumber        Vol_Min(%)        Vol_Max(%)        Height_Low(mil)        Height_High(mil)        Area_Min(%)        Area_Max(%)        OffsetX_Error(mil)        OffsetY_Error(mil)
1        10:B2        112.553        5.108        103.564        GOOD        ST2111231C6        -0.063        0.258        1        1        4600        901        -0.178        0.935        1        40        180        50.038        249.936        50        200        12.42913        9.66142
2        10:B2        113.519        5.247        101.684        GOOD        ST2111231C6        0.209        0.204        1        1        4640        884        0.588        0.74        2        40        180        50.038        249.936        50        200        12.42913        9.66142
发表于 2021-11-27 13:43:00 | 显示全部楼层
  1. powershell "(type a.csv) -replace '^(.*?,)(.*?):(.*?)(,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,)(.*?)(,.*)$','$1$3$4$2$6'" >b.csv
复制代码
 楼主| 发表于 2021-11-27 22:42:52 | 显示全部楼层
感谢 idwma的帮忙
但是更改时,CSV文件的第二行发生改变,请帮忙看看是什么原因

顺便帮忙看看是否可以做到下面的几点:
1:可以自动文件夹:如D:\123  修改完成后  ,直接剪切到 D:\456中
2:保持文件名不改变
3:可以连续的运行,如果出现文件没有处理完成,需要重复再处理一次
发表于 2021-11-27 23:08:00 | 显示全部楼层
本帖最后由 idwma 于 2021-11-27 23:11 编辑

回复 3# 司马光2008
  1. powershell "dir D:\123\*.csv|foreach{out-file -enc default D:\456\$_.name -inp ((type $_.fullname) -replace '^(\d*?,)(.*?):(.*?)((?:,.*?){8},)(.*?)(,.*)$','$1$3$4$2$6');del $_.fullname}"
复制代码
 楼主| 发表于 2021-11-28 10:46:02 | 显示全部楼层
上面这个无法运行哦,
提示:正则表达式模式 。。 无效。
 楼主| 发表于 2021-11-28 10:46:16 | 显示全部楼层
帮忙看看是什么问题,谢谢
发表于 2021-11-28 17:58:22 | 显示全部楼层

  1. #@&cls&powershell "type %~s0|out-string|iex"&pause&exit
  2. dir D:\123\*.csv|foreach{
  3. $a="D:\456"+$_.name
  4. out-file -enc default $a -inp ((type $_.fullname) -replace '^(\d+?,)(.*?):(.*?)(,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,)(.*?)(,.*)$','$1$3$4$2$6')
  5. del $_.fullname
  6. }
复制代码

评分

参与人数 1技术 +1 收起 理由
司马光2008 + 1 技术很好

查看全部评分

 楼主| 发表于 2021-11-28 20:38:27 | 显示全部楼层
感谢 idwma的帮忙
 楼主| 发表于 2021-11-28 20:58:56 | 显示全部楼层
最后的批处理已经可以实现功能,但是只能运行一次,我想无限循环的运行批处理,请问什么修改,帮忙看看,谢谢。
发表于 2021-11-29 16:02:09 | 显示全部楼层
回复 9# 司马光2008
  1. #@&cls&powershell "type %~s0|out-string|iex"&pause&exit
  2. do{
  3.     dir D:\123\*.csv|foreach{
  4.         $a="D:\456"+$_.name
  5.         out-file -enc default $a -inp ((type $_.fullname) -replace '^(\d+?,)(.*?):(.*?)(,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,)(.*?)(,.*)$','$1$3$4$2$6')
  6.         del $_.fullname
  7.     }
  8. }while(!(sleep 1))
复制代码
 楼主| 发表于 2021-11-29 20:12:34 | 显示全部楼层
感谢 idwma
 楼主| 发表于 2021-12-5 19:52:35 | 显示全部楼层
经过几天的测试,发现文件转换后剪切到456文件夹里面的文件无法删除,并且文件大小都是1k的空文件
发表于 2021-12-5 23:11:49 | 显示全部楼层
回复 12# 司马光2008


    先结束脚本就可以删除文件了。
 楼主| 发表于 2021-12-6 07:26:29 | 显示全部楼层
脚本需要连续几天运行
发表于 2021-12-6 21:30:51 | 显示全部楼层
换一种方式
  1. #@&cls&powershell "type %~s0|out-string|iex"&pause&exit
  2. do{
  3.     dir D:\123\*.csv|foreach{
  4.         $a="D:\456"+$_.name
  5.         move $_.fullname D:\456\
  6.         if($?){
  7.             $b=type $a
  8.             sc $a ($b -replace '^(\d+?,)(.*?):(.*?)(,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,)(.*?)(,.*)$','$1$3$4$2$6')
  9.         }
  10.     }
  11. }while(!(sleep 1))
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 17:58 , Processed in 0.034880 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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