如何在Windows批处理文件中嵌入一个文本文件

3

我需要创建一个批处理文件,用于编写文本文件(可能包括变量)。在Unix中使用bash可以轻松实现:

#!/bin/bash
ver="1.2.3"
cat > file.txt <<EOL
line 1, ${ver}
line 2 
line 3
... 
EOL

如何使用批处理文件来完成这个最简单的任务?

注意:在heredoc for Windows batch?中有一个完整的解决方案,但似乎对于临时使用来说过于复杂。我正在寻找一种快速简单的方法。


在批处理文件中键入。 - user6017774
@SomethingDark - 谢谢,我尝试过寻找但没有找到。虽然heredoc对于即席情况更为完整,但它也更加复杂。我找到了一些其他的问题,但我无法将建议的答案添加到它们中,所以我打开了一个新的问题。我应该删除这个吗? - Dror Harari
2
这真的取决于你。就我个人而言,我会这样做,但同时,如果我们删除了所有重复现有批处理问题的批处理问题,那么2016年就不会有任何问题被提出。 - SomethingDark
2个回答

5
以下代码在只有一个数据块(文本)的情况下可以正常工作。
@ECHO OFF
set string=beautyful
REM get linenumber for Data:
for /f "tokens=1 delims=:" %%a in ('findstr /n /b "REM StartData" "%~f0"') do set ln=%%a

REM print Data (use call to parse the line and evaluate variables):
(for /f "usebackq skip=%ln% delims=" %%a in ("%~f0") do call echo %%a)>"new.txt"
type "new.txt"
goto :eof

REM StartData
hello %string% world
line 2
line 3

如果数据中没有变量,可以省略call。优点:不需要转义任何字符,甚至通常有问题的字符也能正常工作(你也可以使用more +%ln% "%~f0"代替for循环)。遗憾的是,当你使用call来解析变量行时,就会失去这个优势。


2
我发现最简单、最不麻烦的方法如下:
set ver=1.2.3
(
echo ^
line 1, %ver%^

line 2^

line 3^

...
) > file.txt

运行脚本后,我得到了:
C:\> type file.txt
line 1, 1.2.3
line 2
line 3
...

基本上,每行都必须以插入符号 (^) 和一个空行结束。


不明白为什么要转义换行符? - Squashman
@Squashman 因为我想只使用一个echo,所以插入符号不是用作转义而是用作续行符。 - Dror Harari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接