ответ

13

О значениях переменных: вы можете использовать большинство символов в качестве значений переменных, включая пробел. Если вы используете специальные символы <,>, |, & или ^, вы должны предшествовать им символом escape (^) или кавычками. Если вы используете кавычки, они включаются как часть значения, потому что все, что соответствует знаку равенства, принимается за значение.

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds_shelloverview.mspx?mfr=true

Проверить раздел "Установка переменных окружения".

Об именах переменных: на мой взгляд, для лучшей совместимости с каждым приложением вы должны ограничивать себя буквами, цифрами, подчеркиванием (_) и минусом (-).

Я уверен, что все допустимые символы POSIX для файлов в порядке, но я не нашел никаких доказательств этого.


Что касается имен переменных имен мы должны также принять скобку, поскольку %ProgramFiles(x86)% является хорошо известным envar. Из моих экспериментов кажется, что в дополнение к символам букв и цифр эти символы действительны _(){}[]$*+-\/"#',;[email protected]!?, и эти символы не действительны %<>^&|=:.

Я не делал исчерпывающий поиск, но проверял наиболее распространенные не буквенно-цифровые символы.

И просто для удовольствия вы можете назвать envar %_(){}[]$*+-\/"#',;[email protected]!?%:

C:\>set _(){}[]$*+-\/"#',;[email protected]!?=xyz 

C:\>echo %_(){}[]$*+-\/"#',;[email protected]!?% 
xyz 
0

Похоже <>^&| также являются допустимыми символами, до тех пор, как они правильно спасся:

C:\>set ^<^>^^^&^|=xyz 

C:\>echo %<>^&|% 
xyz 
Смежные вопросы