我有一个cmd批处理脚本,其中:
这一切都正常,但有一个例外,输入文件包含空行,但是当我打开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
答案 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%
)