@ECHO OFF
CLS
SET ad =
SET /p ad = Do you want to [A] Allow or [D] Deny?
ECHO "%ad%"
Я набираю A и нажимаю Enter , и получаю вывод:
Do you want to [A] Allow or [D] Deny?
""
Почему это не работает?
Вы не устанавливаете %ad% . Вы устанавливаете %ad % .
Некоторые языки более требовательны к пробелам, чем другие. Язык сценариев cmd.exe является одним из них. Синтаксис для установки переменной set name=value , и если вы добавите пробелы вокруг = , они станут частью имени и значения переменной.
Если вы пишете сценарий только для Windows 7/8, я настоятельно рекомендую вместо этого изучить PowerShell. Язык, используемый cmd.exe, ужасен.
Насколько мне известно, командный процессор в Windows 8 не отличается от процессора в Windows 7
Все, вплоть до знака равенства, является частью имени переменной. Так что в этом случае имя вашей переменной на самом деле "ad " без кавычек. Вы можете просматривать текущие переменные среды с помощью set команд без каких-либо параметров - это очень полезно для отладки.