标题: [文本处理] 求助批处理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
- 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 - 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
- #@&cls&powershell "type %~s0|out-string|iex"&pause&exit
- dir D:\123\*.csv|foreach{
- $a="D:\456\"+$_.name
- out-file -enc default $a -inp ((type $_.fullname) -replace '^(\d+?,)(.*?):(.*?)(,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,)(.*?)(,.*)$','$1$3$4$2$6')
- del $_.fullname
- }
复制代码
作者: 司马光2008 时间: 2021-11-28 20:38
感谢 idwma的帮忙
作者: 司马光2008 时间: 2021-11-28 20:58
最后的批处理已经可以实现功能,但是只能运行一次,我想无限循环的运行批处理,请问什么修改,帮忙看看,谢谢。
作者: idwma 时间: 2021-11-29 16:02
回复 9# 司马光2008 - #@&cls&powershell "type %~s0|out-string|iex"&pause&exit
- do{
- dir D:\123\*.csv|foreach{
- $a="D:\456\"+$_.name
- out-file -enc default $a -inp ((type $_.fullname) -replace '^(\d+?,)(.*?):(.*?)(,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,)(.*?)(,.*)$','$1$3$4$2$6')
- del $_.fullname
- }
- }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
换一种方式- #@&cls&powershell "type %~s0|out-string|iex"&pause&exit
- do{
- dir D:\123\*.csv|foreach{
- $a="D:\456\"+$_.name
- move $_.fullname D:\456\
- if($?){
- $b=type $a
- sc $a ($b -replace '^(\d+?,)(.*?):(.*?)(,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,)(.*?)(,.*)$','$1$3$4$2$6')
- }
- }
- }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 - #@&cls&powershell "type %~s0|out-string|iex"&pause&exit
- do{
- dir D:\123\*.csv|foreach{
- $a="D:\456\"+$_.name
- move $_.fullname $_.fullname 2>$null
- if($?){
- sc $a ((type $_.fullname) -replace '^(\d+?,)(.*?):(.*?)(,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,)(.*?)(,.*)$','$1$3$4$2$6')
- del $_.fullname
- }
- }
- }while(!(sleep 1))
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |