2013-05-02 75 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脚本同样的事情。