我尝试过以下方法:
@echo off
REM New line.
set LF=^& echo.
set multiline=multiple%LF%lines%LF%%LF%of%LF%text
echo %multiline%
echo %multiline% > text.txt
Run Code Online (Sandbox Code Playgroud)
它只保存文本的第一行.
所以我想这样做的唯一方法是使用for循环?
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
Run Code Online (Sandbox Code Playgroud)
您的代码从不尝试创建包含多行文本的变量。相反,您正在尝试创建一个包含多个命令(宏)的变量,这些命令在执行时会生成多行文本。
这是一个简单的脚本,它真正创建了一个多行变量,然后将内容写入文件:
@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
Run Code Online (Sandbox Code Playgroud)
您可以在解释 dos-batch newline variable hack 的工作原理中阅读有关在变量中使用换行符的更多信息。我使用的代码看起来不同,但它有效,因为我使用了一个
%= 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
Run Code Online (Sandbox Code Playgroud)