2016-05-17 87 views
0

我有一個.txt文件是這樣的:批次:轉換管分隔的文本文件,以逗號分隔的CSV文件

Customer Number||Customer Name||Partner Number||Partner Name||Customer Country 
1ABC||Jame||1234||Anny||USA 
2DEF||Susan||5678||Prissy||UK 

我的輸出應該是一個.csv文件,沒有空列。

這是我的嘗試:

@echo off 
setlocal disableDelayedExpansion 
set input="C:\a.txt" 
set output="C:\Customer_Pipe.csv" 
>%output% (
    for /f "tokens=*" %%a in ('input"') do (
     set line=%%a 
     setlocal enableDelayedExpansion 
     echo "!line:|=","!">>"%~2" 
    ) 
) 
+2

好的。你有問題嗎? –

+0

@RB。我需要寫一個批處理文件。要做到這一點 –

+3

好的。什麼阻止你這樣做? (請注意,StackOverflow不是一個代碼編寫服務,我們可以幫助您解決所面臨的特定問題,但不會爲您編寫代碼) –

回答

1

如果你想讀取存儲在變量INPUT的文件,你需要閱讀它作爲%INPUT%做到這一點(你說INPUT從字面上看,奇數報價)。當您在for /F集合中指定''時,()內的部分將被解釋爲命令而不是文件,因此for /F會嘗試執行命令input,該命令無法找到,因此腳本失敗。我強烈建議將""usebackq選項一起放在指定文件的周圍,以避免路徑/文件名稱中出現空白的問題。

如果要寫入存儲在變量OUTPUT中的文件,則不得將echo重定向到其他位置(您在代碼中放置了>>"%~2")。

這裏是作爲我會寫它的代碼:

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

rem Define constants here: 
set "INPUT=%~1" 
set "OUTPUT=%~2" 

if not defined INPUT exit /B 1 
if not defined OUTPUT set "OUTPUT=con" 
> "%OUTPUT%" (
    for /F usebackq^ delims^=^ eol^= %%L in ("%INPUT%") do (
     set "LINE=%%L" 
     setlocal EnableDelayedExpansion 
     echo(!LINE:^|^|=,! 
     endlocal 
    ) 
) 

endlocal 
exit /B 

批處理程序輸入文件必須作爲第一個命令行參數來提供。第二個參數(可選)是輸出文件。

請注意,此腳本不檢查輸入數據是否包含,字符,這會影響轉換文件的處理方式。

echo("!LINE:||=","!" 

的輸出數據(與原echo命令行)看起來是這樣的:如果你想要把周圍返回的CSV數據,以避免數據解釋煩惱的各個領域引號,以取代上述echo命令行:

Customer Number,Customer Name,Partner Number,Partner Name,Customer Country 
1ABC,Jame,1234,Anny,USA 
2DEF,Susan,5678,Prissy,UK 

與改性echo命令行輸出數據如下:

"Customer Number","Customer Name","Partner Number","Partner Name","Customer Country" 
"1ABC","Jame","1234","Anny","USA" 
"2DEF","Susan","5678","Prissy","UK" 
+0

它完全按照我希望的那樣工作@aschipfl –

+0

我是新來的stackoverflow,我沒有足夠的聲譽做它..對不起..是否有任何方法來刪除文本文件中的所有空白,然後將其轉換爲csv在同一批次你幫我.. @aschipfl –

+0

接受(勾選綠色複選標記)總是可能的,獨立於聲譽狀態。要刪除空格,你可以在'echo'命令行之前插入'set「LINE =!LINE:=!」';要刪除標籤,只需添加另一行(當然,用空格替換空格);你可以用任何角色來做到這一點;實際上這是用'='(這裏什麼都沒有)之後的字符串替換':'和'='(這裏是一個_space_)之間的給定字符串(另請參閱'set /?')... – aschipfl

0

有在你的代碼的兩個問題。

1)
您使用setlocal EnableDelayedExpansion,這是一個好主意,但是你必須與其他endlocal後你〜32個setlocals得到一個錯誤關閉它。

2)
您的替換功能看起來有點奇怪。
您添加一些引號,它們將在稍後輸出。
你可以試試這個。 echo(!line:^|^|=,!

在所有

>%output% (
    for /f "tokens=*" %%a in (%input%) do (
     set "line=%%a" 
     setlocal EnableDelayedExpansion 
     set "line=!line:||=,!" 
     (echo(!line!) 
     endlocal 
    ) 
) 
+0

它可以工作,但csv文件包含指定爲輸入(C:\ a.txt)的路徑,而不是文本文件中的數據。 @jeb –

+0

@ Gowtham.S,只有當'%INPUT%'包含一個包含在''「''中的文件路徑時,纔會發生這種情況... – aschipfl

相關問題