чтение сценария cmd из файла и запись в файл теряет пустую строку - PullRequest
0 голосов
/ 22 мая 2019

У меня есть командный скрипт 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 Ответ

1 голос
/ 22 мая 2019

Следующие поля содержат пустые строки:

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% здесь)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...