@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?
""

Почему это не работает?

2 ответа2

5

Вы не устанавливаете %ad% . Вы устанавливаете %ad % .

Некоторые языки более требовательны к пробелам, чем другие. Язык сценариев cmd.exe является одним из них. Синтаксис для установки переменной set name=value , и если вы добавите пробелы вокруг = , они станут частью имени и значения переменной.

Если вы пишете сценарий только для Windows 7/8, я настоятельно рекомендую вместо этого изучить PowerShell. Язык, используемый cmd.exe, ужасен.

3

Насколько мне известно, командный процессор в Windows 8 не отличается от процессора в Windows 7

Все, вплоть до знака равенства, является частью имени переменной. Так что в этом случае имя вашей переменной на самом деле "ad " без кавычек. Вы можете просматривать текущие переменные среды с помощью set команд без каких-либо параметров - это очень полезно для отладки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .