如何使用批

时间:2017-03-20 15:48:18

标签: batch-file

从两个输入文件开始,我想生成一个应该是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);

[...]

如何使用批处理文件执行此操作?

提前致谢 马西莫皮利亚

3 个答案:

答案 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关闭每个命令到控制台的打印,但它仍然可以打印到文件 一个'>'将覆盖现有文件,双重'>>'附加到它。