如何在 cmd 中的文件中保留要一次性输出的文本?

How do I preserve text to output all at once in a file in cmd?

我想知道是否有保留文本格式(如空格、换行符)的功能,因为我正在创建一个 .bat 文件并相应地创建另一个 .bat 文件。

现在,如果我想输出文本以创建第二个 .bat 文件,我将一次回显 1 行。

@ECHO OFF
SET file=output.bat
ECHO @ECHO OFF > %file%
ECHO ECHO HELLO >> %file%
ECHO PAUSE >> %file%
Pause

上面的方法实在是太低效了,想一次性全部输出

那么我可以这样输出文字吗?

ECHO "@ECHO OFF
ECHO HELLO
PAUSE">%file%

谢谢!

您可以一次重定向一段代码

@ECHO OFF
SET file=output.bat
(
  ECHO @ECHO OFF
  ECHO ECHO HELLO
  ECHO PAUSE 
) > %file%

另一种方法是使用多行字符^,但是你还需要在每个文本行之后有一个空行

@ECHO OFF
SET "file=output.bat"
(
  ECHO @ECHO OFF^

  ECHO HELLO^

  PAUSE
) > "%file%"

Jebs 解决方案的替代方案是使用前缀字符串和带有 findstrfor /f 循环来读取要输出到辅助文件的文本。

@ECHO OFF & CD /d "%~dp0"
(
 For /f "tokens=1,* Delims=#" %%G in ('%__APPDIR__%findstr.exe /bl ":-#" "%~f0"')Do Echo(%%H
)>"outfile.bat"
outfile.bat

:-#@ECHO OFF
:-#ECHO HELLO
:-#PAUSE

备注:

  • 要输出的文本中不能出现 Delim 字符。 # 被使用是因为它在批处理语法中没有意义
  • 前缀字符串始终以 : 开头,因为这表示一个标签,并且在批处理运行时会被解释器忽略。
  • 中间前缀字符(上例中的-)允许在源文件中存储多个文件。只需相应地更改 findstr 搜索词中的前缀字符串即可。
  • /bl ":-#" "%~f0" findstr 在 运行 批处理 "%~f0" 中搜索每行 b 开头的 l 迭代字符串 :-#
  • 变量不会展开
@ECHO OFF
SET file=output.bat
ECHO @ECHO OFF > %file%
ECHO ECHO HELLO >> %file%
ECHO PAUSE >> %file%
Pause

可以有限制替换为

@ECHO @ECHO OFF ^& ECHO HELLO ^& PAUSE >output.bat