如何在 BATCH 的类型命令中使用变量?

How can I use a variable in BATCH's type command?

我写了一个小的批处理脚本来将我的 html 文件解析成一个 cpp-Header 文件,这样我就可以将它编译成 ESP8266 (PROGMEM)。脚本真的很简单:

@echo off
set /P filename=Enter File name (w/o .html extension): 
if exist "..\website\%filename%.html" (
    echo|set /p dummyvar=%filename%>beforetemp.txt
    type before.txt beforetemp.txt before2.txt "..\website\%filename%.html" after.txt > "..\server\%filename%html.h"
) else (
    echo FILE at website\%filename%.html DOES NOT EXISTS!
    pause
)
exit 0

在我添加可以输入要复制的文件名的部分之前一切正常。

全部完成的文件应该如下所示:

#include <arduino.h>

const char indexhtml[] PROGMEM = R"====(
<html>
...
</html>
)====";

但是当我 运行 脚本时,它在 beforetemp.txt 的末尾插入了一个 space 字符,因此搞砸了变量名在我的 indexhtml.h 文件中。 before.txt beforetemp.txt before2.txt 变成

#include <arduino.h>

const char index html[] PROGMEM = R"====(

而不是

#include <arduino.h>

const char indexhtml[] PROGMEM = R"====(

问题是:如何将 before.txt 和 before2.txt 之间的 %filename% 的内容打印到我的新文件中?


以下是使用的文件:

before.txt

#include <arduino.h>

const char 

before2.txt

html[] PROGMEM = R"====(

after.txt


)====";

我会建议以下内容:

before.txt

#include <arduino.h>

const char 

before2.txt

html[] PROGMEM = R"====(


after.txt


)====";

您使用以下批处理文件,使用 Copy 而不是 Type:

@Echo Off
Set /P "filename=Enter HTML file name without extension: "
If Not Exist "..\website\%filename%.html" (
    Echo website\%filename%.html does not exist.
    %__AppDir__%\timeout.exe /T 5 /NoBreak > NUL
    Exit /B 2
)
< NUL Set /P "=%filename%" > "beforetemp.txt"
Copy "before.txt" + "beforetemp.txt" + "before2.txt" + "..\website\%filename%.html" + "after.txt" "..\server\%filename%html.h" /B
Exit /B %ErrorLevel%

请注意,这目前不会删除您的,可能现在不需要,beforetemp.txt,因此您可能希望在退出之前合并一个执行此操作的方法。

正如我所说,问题出在我将 %filename% 回显到我的临时文件中的那一行。 我换了行

echo|set /p dummyvar=%filename%>beforetemp.txt

< nul set /P ="%filename%">beforetemp.txt

现在一切正常。


完整的批处理文件现在如下所示:

@echo off
set /P filename=Enter File name (w/o .html extension): 
if exist "..\website\%filename%.html" (
    < nul set /P ="%filename%">beforetemp.txt
    type before.txt beforetemp.txt before2.txt "..\website\%filename%.html" after.txt > "..\server\%filename%html.h"
) else (
    echo FILE at website\%filename%.html DOES NOT EXISTS!
    pause
)
exit 0