Предпосылка вашего вопроса неверна.Оба набора кода создают текстовую переменную с сохранением специальных символов.У одного есть +
, у другого нет.+
не имеет ничего общего с конкатенацией в пакетном программировании.Это просто символ, как и любой другой.
Специальные символы <
и >
сохраняются, потому что вы заключили их в кавычки. (На самом деле, в строке сервера отсутствует закрывающая кавычка. Но CMD.EXE оказывается прощающим. Возможно, вам следует добавить заключительную цитату, хотя для ясности.)
У вас нетбеспокоиться о существующих специальных символах внутри !text!
, потому что отложенное расширение защищает специальные символы.Если бы вместо этого вы использовали %text%
, то вам пришлось бы беспокоиться о специальных символах внутри значения.
Если вас беспокоит, соответствует ли текст ожидаемому, вам следует посмотреть назначение текстовой переменной, а не вывод в вашем почтовом сообщении.Добавьте код отладки, например
set text
или
echo text=[!text!]
, к своему коду, чтобы увидеть значение после его построения.(Я добавил квадратные скобки, чтобы вы могли видеть конечные пробелы.)
Тот факт, что версия с +
работает с вашей электронной почтой, в то время как версия без, не имеет ничего общего со сборкойтекстовая строка.Это должно быть что-то, что происходит после того, как вы создаете текст, что-то связанное с обработкой самого почтового сообщения.
Я не понимаю, почему цитаты в вашем тексте не появляются в вашем почтовом сообщении.Опять же, после создания текста что-то должно происходить.
Вулканино предложил метод удаления цитат из текста, но его решение слишком сложное.На самом деле у него был совершенно хороший метод в верхней части его ответа, и он его не осознавал - нет никаких оснований для того, чтобы использовать его там в первую очередь.
SET "text="
SET "text=!text! <h1>server %%i:</h1>"
SET "text=!text! Port %%a : %%b<br/>"
SET "text=!text! <br/>"
Обратите внимание на вступительную цитату до имя переменной.Эта форма будет сохранять специальные символы без включения кавычек в значение.
Альтернативный метод сохранения специальных символов без кавычек в значении - экранирование специальных символов.
SET text=
SET text=!text! ^<h1>server %%i:^</h1^>
SET text=!text! Port %%a : %%b^<br/^>
SET text=!text! ^<br/^>
Я думаю, чтоуказанное решение гораздо приятнее.