批量打印文本块到文件

时间:2015-07-01 01:02:48

标签: windows batch-file

批处理时,您可以将一些文本打印到这样的文件中:

echo Foo Bar> test.txt

你可以打印一个这样的文本块:

> test.txt (
    echo Foo Bar
    echo Bar Foo
)

那么,是否有很好的,非常好的方法来打印一个文本块而不用在每一行上使用echo?类似的东西:

echo> test.txt (
    Foo Bar
    Bar Foo
)

注意:问题不在于我无法 echo ...这是我不想要它 - 这一点的目的是使代码更容易阅读,更好看,写。

4 个答案:

答案 0 :(得分:1)

像这样,也许?

>u:\file.txt (FOR %%a IN ("line 1" "line 2" "line3") do echo %%~a)

由rojo编辑:应该注意的是,每个引用的参数都可以放在自己的行上,以进一步提高代码的可读性。

@echo off
setlocal

>out.txt (
    for %%I in (
        "the quick brown"
        "fox jumps over"
        "the lazy dog"
    ) do echo %%~I
)

type out.txt

答案 1 :(得分:0)

您可以只使用一个echo命令显示多行:

@echo off
setlocal EnableDelayedExpansion

set NL=^
%Don't remove%
%these lines%

(
echo ^
Line one!NL!^
Line two!NL!^
Line three
) > test.txt

编辑:在评论中阅读此附加规范后:

  

这是一大堆更多批次代码,可能是50行......   我可能希望稍后编辑此代码,因此易于阅读是必要的。   我不希望在一行中包含所有50行,因为这是为了清晰而不是功能。

我想我终于理解了这个请求,即:"如何在批处理文件中嵌入文本行,并将它们提取到另一个文件?"。这是我用于同一目的的方法:

@echo off 

rem Use :GetResource subroutine to extract text placed in this file; for example:
call :GetResource example.bat
call :GetResource example.txt

rem Execute the just extracted Batch file
call example.bat

goto :EOF


A couple examples of embedded files


<resource id="example.bat">
@echo off
echo Hello, I am example.bat
type example.txt
</resource>

<resource id="example.txt">
An example of data file
</resource>


rem Extract text from lines placed in a "resource" in this .bat file

:getResource resourceId
setlocal EnableDelayedExpansion
rem Resource data start format: <resource id="resourceId">
set start=
set lines=
for /F "tokens=1,3 delims=:=>" %%a in ('findstr /N "^</*resource" "%~F0"') do (
   if not defined start (
      if "%1" equ "%%~b" set start=%%a
   ) else (
      if not defined lines set /A lines=%%a-start-1
   )
)
set line=0
(for /F "skip=%start% tokens=1* delims=]" %%a in ('find /N /V "" ^< "%~F0"') do (
   setlocal DisableDelayedExpansion
   echo(%%b
   endlocal
   set /A line+=1
   if !line! equ %lines% exit /B
)) > "%~1"
exit /B

答案 2 :(得分:0)

我写了PrintHere.bat utility,我认为这正是你要找的:-)
请点击链接获取代码,并了解其工作原理。

以下是如何将它用于您的示例:

call PrintHere /- " " :text >test.txt
    Foo Bar
    Bar Foo
:text

我添加了/- " "以从输出中去除前导空格。如果没有该选项,您将使用以下内容获得相同的结果:

call PrintHere :text >test.txt
Foo Bar
Bar Foo
:text

答案 3 :(得分:0)

嗯,这很老了,并且有一些有趣的答案。让我们看看这个是否也证明对搜索者有用。如果你的文本是一个固定的文本块,比如你要插入程序的一些代码,那么你可以将它放在自己的文件中,然后输入&#34;键入&#34;它

myblock.txt:
Hello world
isn't this nice?

然后您可以使用简单类型命令

插入这两行
@echo off
type myblock.txt >> target_file.sql.

我现在正在使用oracle&#34;部署脚本构建器&#34;来实现这一点,它将我们在Subversion中拥有的内容并将其很好地打包到基于模式的脚本中。如果要将文本附加到现有文件,请不要忘记使用">>"