从文件读取并写入文件的cmd脚本丢失空行

时间:2019-05-22 17:33:51

标签: batch-file

我有一个cmd批处理脚本,其中:

  • 逐行读取文件
  • 如果该行与指定的字符串匹配,则会将该行和2条新行输出到新的tmp文件中
  • 如果该行与指定的字符串不匹配,则只会将该行输出到新的tmp文件中

这一切都正常,但有一个例外,输入文件包含空行,但是当我打开tmp文件时,它丢失了所有空行。

我该如何解决?

脚本:

@echo off
setlocal enableextensions enabledelayedexpansion

set inputfile=C:\temp\animals.txt

set tempfile=C:\temp\animals.txt.tmp

del %tempfile%

copy /y nul %tempfile%

set find=hippo
set newline1=spider
set newline2=snake

for /f "delims=" %%l in (%inputfile%) do (
    if %%l==!find! (
        echo %find%>>%tempfile%
        echo %newline1%>>%tempfile%
        echo %newline2%>>%tempfile%
    ) else (
        echo %%l>>%tempfile%
    )
)

endlocal

示例输入文件:

dog


cat

monkey



hippo

lion

tiger

1 个答案:

答案 0 :(得分:1)

以下内容保留空白行:

for /f "tokens=1,* delims=]" %%l in ('type "%inputfile%"^|find /v /n ""') do echo(%%m

我确定,您可以自己实现它?

for /f循环会忽略空行,因此诀窍是不给空行。 find /n /v ""的每一行都以其行号开头(格式为[1]original line),因此for /f需要处理一些事情。然后,我们仅使用第一个](此处是第二个标记,%%m)之后的字符串,这是您的原始行。

您还应该更改行

 if %%l==!find! (

 if "%%m"=="!find!" (

为避免语法错误,当%%m为空时。 (顺便说一句:我认为这里没有理由不使用%find%