从两个输入文件开始,我想生成一个应该是C源文件或头文件的输出文件。
输出文件的内容或多或少总是相同,但是变量或函数名称的某些部分。
我正在考虑输入文件(input_1),其中包含我想要生成的输出文件的骨架,就像这样
/**
* @Autor: %AUTOR_NAME%
* @Company: %COMPANY_NAME%
*
* @Filename: ble_%SERVICE_NAME%.h
*/
void ble_%SERVICE_NAME%_init(void);
[...]
其中%AUTOR_NAME%,%COMPANY_NAME%和%SERVICE_NAME%是我想从第二个输入文件(input_2)获取的变量,如下所示
SET AUTOR_NAME="Massimo Pilia"
SET COMPANY_NAME=BBAA00
SET SERVICE_NAME=security
为了获得名为“ble_security.h”的输出文件,其中包含:
/**
* @Autor: Massimo Pilia
* @Company: BBAA00
*
* @Filename: ble_security.h
*/
void ble_security_init(void);
[...]
如何使用批处理文件执行此操作?
提前致谢 马西莫皮利亚
答案 0 :(得分:0)
setlocal enabledelayedexpansion
for /f "delims=" %%a in (input_2) do %%a
(
for /f "delims=" %%a in (input_1) do call set line=%%a&echo(!line!
)>ble_security.h
虽然您需要删除input_2
OR
setlocal enabledelayedexpansion
for /f "delims=" %%a in (input_2) do set "%%a"
(
for /f "delims=" %%a in (input_1) do call set line=%%a&echo(!line!
)>ble_security.h
然后,您可以删除set
input_2
请注意,这会删除任何以;
开头的空行或空行,但对于一行空格会很好
setlocal enabledelayedexpansion
for /f "delims=" %%a in (input_2) do set "%%a"
(
for /f "tokens=1,2delims=]" %%a in ('find /n /v "" input_1') do call set line=%%b&ECHO(!line!
)>ble_security.h
应该允许空行,但会删除任何行中的任何前导]
答案 1 :(得分:0)
解决此问题的最简单方法是充分利用延迟扩展功能。为此,请将变量名称包含在感叹号之间的input_1文件中,而不是百分号:
/**
* @Autor: !AUTOR_NAME!
* @Company: !COMPANY_NAME!
*
* @Filename: ble_!SERVICE_NAME!.h
*/
void ble_!SERVICE_NAME!_init(void);
[...]
然后使用此代码:
@echo off
setlocal EnableDelayedExpansion
rem Load variable definitions from file 2
for /F "delims=" %%a in (input_2.txt) do %%a
rem Process lines of file 1, append a "number:" to all lines
(for /F "delims=" %%a in ('findstr /N "^" input_1.txt') do (
rem Get the line *including* !variable! replacements
set "line=%%a"
rem Remove leading number, show the rest *including* empty lines
echo(!line:*:=!
)) > ble_security.h
您也可以删除input_1文件中定义中的引号;否则,报价将包含在变量值中。
输出示例:
/**
* @Autor: Massimo Pilia
* @Company: BBAA00
*
* @Filename: ble_security.h
*/
void ble_security_init(void);
[...]
答案 2 :(得分:-1)
您可以使用echo将文本发送到文件。
@echo off
echo /** > %outputfile%
echo * @Autor: %AUTOR_NAME% >> %outputfile%
echo * @Company: %COMPANY_NAME% >> %outputfile%
[...]
我假设你已经设置了outputfile变量 @echo off关闭每个命令到控制台的打印,但它仍然可以打印到文件 一个'>'将覆盖现有文件,双重'>>'附加到它。