使用DOS批处理文件从文本文件中删除回车符

时间:2014-10-10 11:54:26

标签: batch-file

在一个文本文件中,我有以下几行:

2014-10-09 00:00:00.000;1663;2014-10-09 12:38:46.000;A;"
                    ";0;0;E/272

2014-10-09 00:00:00.000;1663;2014-10-09 12:38:46.000;A;"
                    ";0;0;D/275

我需要使用DOS批处理文件这个新输出:

2014-10-09 00:00:00.000;1663;2014-10-09 12:38:46.000;A;"";0;0;E/272

2014-10-09 00:00:00.000;1663;2014-10-09 12:38:46.000;A;"";0;0;D/275

我尝试过这个解决方案:

for /f "delims=" %%a in (oldfile.txt) do (
echo/|set /p ="%%a%"
)>>newfile.txt

但输出错误,我在txt newfile中没有两行但只有一行:

2014-10-09 00:00:00.000;1663;2014-10-09 12:38:46.000;A;"";0;0;E/2722014-10-09 00:00:00.000;1663;2014-10-09 12:38:46.000;A;"";0;0;D/275

我错过了什么?

此代码有什么问题?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

  1. 双引号值中的新行在CSV files中绝对有效。

  2. 为什么不使用支持Perl正则表达式的文本编辑器替换?
    例如,运行Perl正则表达式替换使用搜索字符串(?<=")\s+(?=";)并将空字符串替换为替换字符串将完成此任务。

  3. 为替换文件中的字符串而编写控制台应用程序。见
    How can you find and replace text in a file using the Windows command-line environment?

  4. 但是,如果您因为某些未知原因想要使用批处理文件执行此操作,请查看下面的批处理代码,以便为您的示例工作。

    @echo on
    setlocal EnableDelayedExpansion
    set "INTEXTFILE=oldfile.txt"
    
    if not exist "%INTEXTFILE%" goto EndBatch
    
    set "OUTTEXTFILE=newfile.txt"
    if exist "%OUTTEXTFILE%" del "%OUTTEXTFILE%"
    
    set "FirstLine="
    set "EndFirstLine=""
    set "BeginSecondLine=                    ";"
    
    for /f "usebackq delims=" %%A in ("%INTEXTFILE%") do (
        set "Line=%%A"
        if not "!FirstLine!"=="" (
            if "!Line:~0,22!"=="!BeginSecondLine!" (
                set "FirstLine=!FirstLine!!Line:~20!"
                echo !FirstLine!>>"%OUTTEXTFILE%"
                set "Line="
            ) else (
                echo !FirstLine!>>"%OUTTEXTFILE%"
            )
            set "FirstLine="
        )
        if not "!Line!"=="" (
            if "!Line:~-1!"=="!EndFirstLine!" (
                set "FirstLine=!Line!"
            ) else (
                echo !Line!>>"%OUTTEXTFILE%"
            )
        )
    )
    
    :EndBatch
    endlocal
    

    此批处理文件也会删除空行。这是无法避免的,因为命令for在解析文件时忽略空行。