【问题标题】:Removing carriage returns from a text file using a DOS batch file使用 DOS 批处理文件从文本文件中删除回车
【发布时间】:2014-10-10 11:54:26
【问题描述】:

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

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

我错过了什么?

这段代码有什么问题?

提前谢谢你。

【问题讨论】:

    标签: batch-file


    【解决方案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?

    但是,如果您出于某种未知原因想要使用批处理文件执行此操作,请查看下面适用于您的示例的批处理代码。

    @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 在解析文件时会忽略空行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-17
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-09
      • 2013-01-07
      相关资源
      最近更新 更多