2015-11-03 63 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包內。