set /p
немного неприятно с обработкой пробелов, кавычек и знаков равенства.
Кавычка в начале или конце должна быть удвоена, НО, если вы хотите отобразить кавычки, выражение также должно быть заключено в кавычки.
Для отображения одинарной кавычки используйте
<nul set /p ="""
set /p
, кажется, лишает один раз внешние кавычки.
Ваш код можно изменить на <NUL set /p="!var!"
, который должен работать как с обычным текстом, так и с кавычками.
Если текст начинается с пробелов, они будут удалены. (Но не до XP, там set /p "= Hello"
показывает пробелы).
set /p
, кажется, использует для удаления цитаты два раза.
Сначала для расширенного синтаксиса набора
<nul set /p "=hello" Text after the last quote will be dropped
Но и для контента, внешние кавычки будут отброшены
<nul set /p ="hello" Text after the last quote will be dropped
И даже объединяя обе работы
<nul set /p "="hello" Text after the last inner quote will be dropped "
Примечание: я использую <nul set /p
, это намного быстрее, потому что версия echo | set /p
использует канал и порождает два новых экземпляра cmd.exe. (Уже упоминается MC ND)