我尝试了以下内容:
@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循环?
答案 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