如何在 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
我写了一个小的批处理脚本来将我的 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