Printing a paragraph in a window package

The following code prints a paragraph very well

@echo off setlocal disableDelayedExpansion set "skip=" for /f "delims=:" %%N in ( 'findstr /x /n ":::BeginText" "%~f0"' ) do if not defined skip set skip=%%N >test.txt ( for /f "skip=%skip% tokens=*" %%A in ( 'findstr /n "^" "%~f0"' ) do ( set "line=%%A" setlocal enableDelayedExpansion echo(!line:*:=! endlocal ) ) type test.txt exit /b :::BeginText This text will be exactly preserved with the following limitations: 1) Each line will be terminated by CR LF even if original has only LF. 2) Lines are limited in length to approximately 8191 bytes. Special characters like ^ & < > | etc. do not cause a problem. Empty lines are preserved! ;Lines beginning with ; are preserved. :::Leading : are preserved 

Is there a way to add a text marker, for example :::Endtext , so that only the paragraph is between :::BeginText and :::Endtext .

+4
source share
1 answer

Sure: -)

And you can embed several named paragraphs in your script and selectively write them using a unique label for each.

Named text can be displayed anywhere in the script as long as GOTO and / or EXIT / B do not allow text to be executed.

The following is a script encapsulating logic in a procedure :printParagraph .

 @echo off setlocal disableDelayedExpansion goto :start :::BeginText1 Paragraph 1 is preserved Bye! :::EndText :start echo Print paragraph 1 directly to screen echo ------------------------------------------ call :printParagraph 1 echo ------------------------------------------ echo( echo( call :printParagraph 2 >test.txt echo Write paragraph 2 to a file and type file echo ------------------------------------------ type test.txt echo ------------------------------------------ echo( echo( echo Print paragraph 3 directly to screen echo ------------------------------------------ call :printParagraph 3 echo ------------------------------------------ echo( echo( exit /b :::BeginText2 This is paragraph 2 Pure poetry :::EndText :printParagraph set "skip=" for /f "delims=:" %%N in ( 'findstr /x /n ":::BeginText%~1" "%~f0"' ) do if not defined skip set skip=%%N set "end=" for /f "delims=:" %%N in ( 'findstr /x /n ":::EndText" "%~f0"' ) do if %%N gtr %skip% if not defined end set end=%%N for /f "skip=%skip% tokens=*" %%A in ( 'findstr /n "^" "%~f0"' ) do ( for /f "delims=:" %%N in ("%%A") do if %%N geq %end% exit /b set "line=%%A" setlocal enableDelayedExpansion echo(!line:*:=! endlocal ) exit /b :::BeginText3 One more... ...for good measure :::EndText 
+8
source

All Articles