Интерпретатор команд Windows позволяет использовать кавычки вокруг всей команды set (действует в каждой версии Windows NT от NT 4.0 до Windows 2012 R2)
Ваш сценарий должен быть написан следующим образом:
@echo OFF
set "myvar=C:\my music & videos"
Затем вы можете заключать в кавычки переменные по мере необходимости.
Работа с приглашением CMD иногда может показаться эзотерической, но интерпретатор команд на самом деле ведет себя довольно твердо, подчиняясь своей внутренней логике, вам просто нужно переосмыслить вещи.
Фактически, команда set вообще не требует от вас использования кавычек, но и способ назначения переменных, и способ использования без кавычек могут привести к появлению дополнительных пробелов вокруг переменной, которые трудно заметить при отладке вашего скрипта.
например. Оба из нижеприведенных являются технически действительными, но вы можете иметь пробелы, поэтому это не очень хорошая практика:
set myvar=some text
set myvar="some text"
например. Оба нижеприведенных метода являются хорошими для установки переменных в интерпретаторе команд Windows, однако метод двойных кавычек лучше:
set "myvar=Some text"
(set myvar=Some value)
Оба из них ничего не оставляют для интерпретации, переменная будет иметь именно те данные, которые вы ищете.
сильный текст Однако, для ваших целей, только указанный метод будет работать корректно, потому что вы используете зарезервированный символ
Таким образом, вы будете использовать:
set myvar="c:\my music & videos"
Однако, хотя переменная IS правильно установлена на эту строку, когда вы выводите ECHO, строка интерпретатора команды будет интерпретировать амперсанд как ключевое слово для обозначения следующего оператора.
ТАК, если вы хотите вывести строку из переменной, интерпретатору CMD все равно нужно сообщить, что это текстовая строка, или если вы не хотите, чтобы в кавычках показывалось, вам нужно выполнить одно из следующих действий:
выводит переменную WITH Quotes:
Echo."%myvar%"
выводит переменную БЕЗ Кавычек:
Echo.%myvar:&=^&%
<nul SET /P="%myvar%"
В двух приведенных выше сценариях вы можете просто повторить строку без кавычек. Пример вывода ниже:
C:\Admin> Echo.%myvar:&=^&%
C:\my music & videos
C:\Admin> <nul SET /P="%myvar%"
C:\my music & videos
C:\Admin>