使用批处理将多行变量保存到文件中

时间:2017-04-11 15:12:03

标签: batch-file

我尝试了以下内容:

@echo off
REM New line.
set LF=^& echo.
set multiline=multiple%LF%lines%LF%%LF%of%LF%text

echo %multiline%

echo %multiline% > text.txt

它只保存文本的第一行。

所以我想这样做的唯一方法是使用for循环?

2 个答案:

答案 0 :(得分:5)

pause命令之后将脚本花费set - 并感到惊讶;)

之后,将其更改为:

@echo off
REM New line.
set LF=^& echo.
set "multiline=multiple%LF%lines%LF%%LF%of%LF%text"
echo %multiline%
(echo %multiline%) > text.txt
type text.txt

答案 1 :(得分:4)

您的代码从不尝试创建包含多行文本的变量。相反,您正在尝试创建一个包含多个命令(宏)的变量,该命令在执行时会生成多行文本。

这是一个简单的脚本,它真正创建一个包含多行的变量,然后将内容写入文件:

@echo off
setlocal enableDelayedExpansion

:: Create LF containing a line feed character
set ^"LF=^
%= This creates a Line Feed character =%
^"

set "multiline=multiple!LF!lines!LF!of!LF!text"
echo !multiline!
echo !multiline!>test.txt

您可以在Explain how dos-batch newline variable hack works了解有关在变量中使用换行符的详情。我使用的代码看起来不一样,但它起作用,因为我使用了一个 %= undefined variable as comment =%扩展为空。

如果您希望每一行都遵循回车/换行的Windows行尾标准,那么您还需要创建一个回车变量。获得回车的方式完全不同。

@echo off
setlocal enableDelayedExpansion

:: Create LF containing a line feed character
set ^"LF=^
%= This creates a Line Feed character =%
^"

:: Create CR contain a carriage return character
for /f %%A in ('copy /Z "%~dpf0" nul') do set "CR=%%A"

:: Define a new line string
set "NL=!CR!!LF!

set "multiline=multiple!NL!lines!NL!of!NL!text"
echo !multiline!
echo !multiline!>test.txt