Board logo

标题: [文本处理] 求助批处理CSV文件处理 [打印本页]

作者: 司马光2008    时间: 2021-11-27 12:05     标题: 求助批处理CSV文件处理

大神们,最近遇到一个难题,每天要做重复的工作,出现下面的问题,请帮忙看看能不能使用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
作者: idwma    时间: 2021-11-27 13:43

  1. powershell "(type a.csv) -replace '^(.*?,)(.*?):(.*?)(,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,)(.*?)(,.*)$','$1$3$4$2$6'" >b.csv
复制代码

作者: 司马光2008    时间: 2021-11-27 22:42

感谢 idwma的帮忙
但是更改时,CSV文件的第二行发生改变,请帮忙看看是什么原因

顺便帮忙看看是否可以做到下面的几点:
1:可以自动文件夹:如D:\123  修改完成后  ,直接剪切到 D:\456中
2:保持文件名不改变
3:可以连续的运行,如果出现文件没有处理完成,需要重复再处理一次
作者: idwma    时间: 2021-11-27 23:08

本帖最后由 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}"
复制代码

作者: 司马光2008    时间: 2021-11-28 10:46

上面这个无法运行哦,
提示:正则表达式模式 。。 无效。
作者: 司马光2008    时间: 2021-11-28 10:46

帮忙看看是什么问题,谢谢
作者: idwma    时间: 2021-11-28 17:58

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

作者: 司马光2008    时间: 2021-11-28 20:38

感谢 idwma的帮忙
作者: 司马光2008    时间: 2021-11-28 20:58

最后的批处理已经可以实现功能,但是只能运行一次,我想无限循环的运行批处理,请问什么修改,帮忙看看,谢谢。
作者: idwma    时间: 2021-11-29 16:02

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

作者: 司马光2008    时间: 2021-11-29 20:12

感谢 idwma
作者: 司马光2008    时间: 2021-12-5 19:52

经过几天的测试,发现文件转换后剪切到456文件夹里面的文件无法删除,并且文件大小都是1k的空文件
作者: flashercs    时间: 2021-12-5 23:11

回复 12# 司马光2008


    先结束脚本就可以删除文件了。
作者: 司马光2008    时间: 2021-12-6 07:26

脚本需要连续几天运行
作者: idwma    时间: 2021-12-6 21:30

换一种方式
  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))
复制代码

作者: 司马光2008    时间: 2021-12-6 22:15

感谢帮忙,我去测试一下,谢谢
作者: 司马光2008    时间: 2021-12-8 21:51

感谢帮忙,我发现问题了问题点,是数据剪切到456文件夹后,有另外一个软件快速的读走文件,导致没有处理完成,当运行move这个第五行命令时,出错了
作者: idwma    时间: 2021-12-9 15:45

本帖最后由 idwma 于 2021-12-9 15:46 编辑

回复 17# 司马光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.         move $_.fullname $_.fullname 2>$null
  6.         if($?){
  7.             sc $a ((type $_.fullname) -replace '^(\d+?,)(.*?):(.*?)(,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,)(.*?)(,.*)$','$1$3$4$2$6')
  8.             del $_.fullname
  9.         }
  10.     }
  11. }while(!(sleep 1))
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2