Никогда не используйте общедоступные вложенные перечисления?

Я написал очень простую программу, которая может служить заменой для команд 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.

Антонио

14
задан AEW 10 November 2010 в 21:47
поделиться