2013-05-02 74 views
0

我有一個文件,每個字段分隔數千記錄管的加引號腳本刪除字符

"First Name"|"Last Name"|"address"|"City"|"State"|"Zip" 

我怎麼會寫在Windows批處理腳本來處理在一個文件中的數千條記錄?
每一行都有一行一條記錄,使它看起來像下面

First Name|Last Name|address|City|State|Zip 
+0

當你說「過程」時,你究竟是什麼意思? – 2013-05-02 14:49:14

+0

對不起。我的意思是我有一個帶有記錄的文本文件。所以基本上批處理文件應該從文本文件中讀取每條記錄,並將其引出並將所有結果存儲在文本文件中。 – Villumanati 2013-05-02 14:56:35

回答

1
@ECHO OFF 
SETLOCAL enabledelayedexpansion 
DEL outfile.txt 2>nul 
FOR /f "delims=" %%i IN (pipedelims.txt) DO (
SET line=%%i 
SET line=!line:"=! 
>>outfile.txt ECHO(!line! 
) 

應該爲你做的工作。

+0

將重定向移出FOR循環更好。它會刪除感嘆號,有時候也會插入一個號碼 – jeb 2013-05-02 16:50:23

1

比Peter的(也是好的)解決方案更穩定一些。

它也可以處理與感嘆號,插入記號,
這款採用延遲擴展的觸發,如set "line=%%i"僅適用於所有的字符,如果延遲擴展是禁用的,但取出的報價線路,延遲擴展得被啓用。

以「;」開頭的行通常會被默認的EOL字符刪除,因此我使用了一些棘手的構造來關閉EOL。

@echo off 
setlocal DisableDelayedExpansion 
(
    FOR /f delims^=^ EOL^= %%i IN (pipedelims.txt) DO (
    SET "line=%%i" 
    setlocal EnableDelayedExpansion 
    SET "line=!line:"=!" 
    ECHO(!line! 
    endlocal 
) 
) > outfile.txt 
+0

我不明白這一點,它也不起作用:'定義^ =^EOF^='。簡單的「」delims =「'很好。 [討論](http://ss64.org/viewtopic.php?id=1544) – Endoro 2013-05-02 19:48:59

+0

@Endoro - 這是我的錯字,它必須是「EOL」而不是「EOF」。只有「delims =」,你會失去所有以分號開頭的行。 – jeb 2013-05-02 20:30:17

1

下載GnuSed是一個選項:

@echo off 
sed "s/\x22//g" "filein.txt" >"fileout.txt" 

也做使用VBS腳本同樣的事情。