Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file cmd脚本从文件中读取并写入文件会丢失空行_Batch File - Fatal编程技术网

Batch file cmd脚本从文件中读取并写入文件会丢失空行

Batch file cmd脚本从文件中读取并写入文件会丢失空行,batch-file,Batch File,我有一个cmd批处理脚本,它: 逐行读取文件 如果该行与指定的字符串匹配,它会将该行加上2个新行输出到新的tmp文件中 如果该行与指定的字符串不匹配,则只将该行输出到新的tmp文件 这一切都可以正常工作,但有一个例外,输入文件包含空行,但当我打开tmp文件时,它丢失了所有空行 我怎样才能解决这个问题 脚本: @echo off setlocal enableextensions enabledelayedexpansion set inputfile=C:\temp\animals.txt

我有一个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

以下内容保留空行:

for /f "tokens=1,* delims=]" %%l in ('type "%inputfile%"^|find /v /n ""') do echo(%%m
我相信,你可以自己实施吗

for/f循环忽略空行,所以技巧是不给它空行。find/n/v以[1]原始行的格式在每行前面加上行号,因此for/f需要处理一些内容。然后我们只使用第一个]第二个标记%%m后面的字符串,这是您的原始行

你也应该改变你的路线

 if %%l==!find! (


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

只是为了添加到下面@stephan的答案中,试图帮助您创建更好的代码。除了复制/y num%tempfile%之外,只需在循环中添加中断。对于/f标记=1,*delims=]%%a在'type%inputfile%^查找/v/n^&break^>%tempfile%'中执行。。。
 if "%%m"=="!find!" (