打印在Windows批处理一个段落 [英] printing a paragraph in windows batch
问题描述
以下code工作pretty以及打印段落
The following code works pretty well printing the paragraph
@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
有没有一种方法来添加一个文本标记像 ::: ENDTEXT
,以便仅之间的段落
::: BeginText
和 ::: ENDTEXT
打印。
Is there a way to add a text marker like :::Endtext
so that only the paragraph between
:::BeginText
and :::Endtext
is printed.
推荐答案
当然: - )
和您可以在脚本中嵌入多个命名的段落,有选择地采用了独特的标签,为他们每个人写的。
And you can embed multiple named paragraphs within your script and selectively write them by using a unique label for each.
命名的文本可以在任何地方的脚本中,只要被执行出现GOTO和/或EXIT / B prevent的文本。
The named text can appear anywhere within the script as long as GOTO and/or EXIT /B prevent the text from being executed.
下面的脚本封装在逻辑:printParagraph
常规方便
The script below encapsulates the logic in a :printParagraph
routine for convenience.
@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
这篇关于打印在Windows批处理一个段落的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!