2016-11-06 170 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,因爲我只想使用一個回聲,所以插入符號不會用作轉義,而是作爲延續 –

相關問題