Мне понадобилось вывести из BAT файла несколько строк в файл без перевода на новую строку. Все было нормально до тех пор, пока одна из строк не оказалось знаком равенства.
Для демонстрации будут использованы два набора файлов, в каждом скрипт на питоне и bat файл, который его вызывает. Первый скрипт выводит единичку. Второй — знак равенства.
print('1') |
print('=') |
BAT файлы отличаются только тем, что вызывают разные скрипты на питоне.
@ECHO OFF SET python="python" SET path_to_generated_files="D:\soft\bat_with_equality" SET logfile="D:\soft\bat_with_equality\log1.txt" echo|set /p="" 1> %logfile% FOR /F "tokens=* USEBACKQ" %%F IN (`python D:\soft\bat_with_equality\script1.py`) DO ( SET var=%%F ) ECHO %var% echo|set /p=%var% 1>> %logfile% pause |
Команда вида:
echo|set /p=%var% >> %logfile% |
как раз нужна для того, чтобы строка из переменной вывелась в файл без перевода на новую строку. И из-за присваивания там явно не ожидается в переменной var. Из-за этого при выполнении первого питоновского скрипта в bat файле успешно выводится единичка. А вот при выполнении второго варианта BAT файла (где скрипт на питоне выводит знак равно), выходит ошибка: Ошибка в синтаксисе команды.
Примечание. Вордпресс продолжает хулиганить и меняет знак больше на > в кусках кода.
Как экранировать в этом случае знак равно, я не нашел пока.