2016-11-06 171 views
3

我需要创建一个写入文本文件(可能包含变量)的批处理文件。在使用bash的Unix中,这是微不足道的:如何在Windows批处理文件中嵌入文本文件

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

用批处理文件做这件事最简单的方法是什么?

注意:有一个完整的解决方案,使用'heredoc'例程heredoc for Windows batch?,但它似乎太复杂的临时使用。我正在寻找一种快速简单的方法。

+0

输入批处理文件。 – 2016-11-06 15:53:02

+0

@SomethingDark - 谢谢,我试图找到它,不能。 heredoc相当完整,但对于特殊情况要复杂得多。我发现了一些其他问题,但我不能将建议的答案添加到他们,所以我打开了一个新的答案。我应该删除它吗? –

+2

这取决于你,真的。就我个人而言,如果我们删除了所有与现有批处理问题重复的批处理问题,那么在2016年就不会有任何问题。 – SomethingDark

回答

3

的follwoing工作正常,如果只有一个数据(文本)的块

@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。优点:无需逃脱任何东西。即使通常有毒的字符工作(而不是for循环,你也可以使用more +%ln% "%~f0")。不幸的是,当你使用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 
... 

基本上,每个行必须以插入符号被终止(^)和一条空行。

+0

不理解您为什么要逃避换行? – Squashman

+0

@Squashman,因为我只想使用一个回声,所以插入符号不会用作转义,而是作为延续 –

相关问题