2015-11-03 66 views
1

我的公司中有多个来自不同公司的多个CSV文件,这些文件包含来自多个不同公司用户输入数据的多个SQL数据库的多个名称和电子邮件地址。我有一个SQL导出程序,将名称和电子邮件导出到CSV文件。我注意到偶尔有些电子邮件地址在电子邮件地址之前或之后有十六进制0x1F分隔符(在Notepad ++中它看起来像一个黑色的“美国”盒子)。使用批量从CSV文件中删除十六进制1F

我该如何编写一个简单的批处理文件来从任何可能具有该文件的CSV文件中查找并删除该分隔符。并使用/替换原始文件保存输出。最好使用简单的批处理命令,而不是Powershell或Java或其他类似的东西。这将在Windows 2008 R2的标准安装上运行,而无需添加任何额外的程序。

实施例:

指南: C:\上传

文件名(最多23个文件用随机2数字前缀,随后日期): “a1-20151101。 csv“,”b2-20151101.csv“,”cd-20151101.csv“等。

Inside CSV(名字;姓氏;电子邮件):
约翰;李四; [email protected]
简;史密斯; [email protected]

+0

如果可能,请勿重新发明轮子并使用应在W2k8上运行的[JREPL.BAT](http://dostips.com/forum/viewtopic.php?f=3&t=6044):'call jrepl“\ x1F“”“/ m <”inputfile“>”outputfile“' – wOxxOm

+0

所以这个工作?:'@echo off setlocal (for/f”delims =“%% i in('dir/b C:\ Uploads \ *。csv')do( set“inputfile = %% i” call jrepl“\ x1F”“”/ m <“C:\ Uploads \%inputfile%.csv”>“C:\ Uploads \%inputfile %.csv“ )'我尝试过了,但它看起来什么也没做。 –

+0

不用。不要使用中间变量。直接指定''%% i'''并且不要使用相同的输出名称。 'call .... <"%%i" >“%% i.tmp”&move/y“%% i.tmp”“%% i”' – wOxxOm

回答

0

可以花费宝贵的时间来编写一个cmd文件的一些400线的庞然大物。

或者您可以简单地去GnuWin32(流行的UNIX工具的端口到本地Windows)tr程序,它非常适合做这类事情。

那么你的批处理文件将基本上由该行:

tr -d "\37" inputFile >outputFile 

tr程序包含在coreutils包内。