Как я могу использовать переменную в команде типа BATCH? - PullRequest
0 голосов
/ 19 июня 2020

Я написал небольшой пакетный сценарий для синтаксического анализа моего файла 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 и, следовательно, портит имя переменной в моем индексе html. h файл. Материал с before.txt beforetemp.txt before2.txt становится

#include <arduino.h>

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

вместо

#include <arduino.h>

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

Вопрос: как я могу напечатать содержимое% filename% между before.txt и before2.txt в моем новом файле?


Вот используемые файлы:

before.txt

#include <arduino.h>

const char 

before2.txt

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

after.txt


)====";

Ответы [ 2 ]

3 голосов
/ 19 июня 2020

Я бы предложил со следующим содержанием:

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, поэтому вы можете sh включить способ выполнения этого перед выходом.

0 голосов
/ 19 июня 2020

Как я уже говорил, проблема была в строке, где я повторил% 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
...