Я написал очень простую программу, которая может служить заменой для команд FIND
и FINDSTR
, когда они используются для этой цели. Моя программа называется PIPE.COM
, и она просто вставляет пустое пространство в пустые строки, поэтому все строки могут быть непосредственно обработаны командой FOR
без дальнейших настроек (пока вставленное пространство не заботится). Вот он:
@ECHO off
if not exist pipe.com call :DefinePipe
FOR /F "USEBACKQ delims=" %%A IN (`pipe ^< "build.properties"`) DO (
ECHO(--%%A--
)
pause
goto :EOF
:DefinePipe
setlocal DisableDelayedExpansion
set pipe=´)€ì!Í!ŠÐŠà€Ä!€ü.t2€ü+u!:æu8²A€ê!´#€ì!Í!².€ê!´#€ì!Í!²+€ê!´#€ì!Í!Šò€Æ!´,€ì!Í!"Àu°´LÍ!ëÒ
setlocal EnableDelayedExpansion
echo !pipe!>pipe.com
exit /B
EDIT: Добавление в качестве ответа на новый комментарий
Код в подпрограмме DefinePipe создает 88-байтную программу под названием pipe. com, которые в основном выполняют процесс, эквивалентный этому псевдо-пакетному коду:
set "space= "
set line=
:nextChar
rem Read just ONE character
set /PC char=
if %char% neq %NewLine% (
rem Join new char to current line
set line=%line%%char%
) else (
rem End of line detected
if defined line (
rem Show current line
echo %line%
set line=
) else (
rem Empty line: change it by one space
echo %space%
)
)
goto nextChar
Таким образом, пустые строки во входном файле изменяются линиями с одним пробелом, поэтому команда FOR / F не пропускает больше Oни. Это работает «до тех пор, пока вставленное пространство не заботится», как я сказал в своем ответе.
Обратите внимание, что программа pipe.com не работает в 64-битных версиях Windows.
Антонио