23

经过一番研究,我发现名称的长度限制为 255 个字符,值的长度限制为 32767 个字符。

但是名称允许使用哪些字符?
允许使用哪些字符?

4

3 回答 3

24

关于变量值:您可以使用大多数字符作为变量值,包括空格。如果使用特殊字符 <、>、|、& 或 ^,则必须在它们前面加上转义字符 (^) 或引号。如果使用引号,它们将作为值的一部分包含在内,因为等号后面的所有内容都被视为值。

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

检查“设置环境变量”部分。

关于变量名:在我看来,为了与每个应用程序实现最佳兼容性,您应该限制自己使用字母、数字、下划线 (_) 和减号 (-)。

我很确定文件的所有 POSIX 有效字符都可以,但我没有找到任何证据。


关于变量名,我们还需要接受括号,因为 %ProgramFiles(x86)%它是一个众所周知的 envar。从我的实验看来,除了字母和数字字符之外,这些字符都是有效的_(){}[]$*+-\/"#',;.@!?,而这些字符是无效的%<>^&|=:

我没有进行详尽的搜索,只是测试了最常见的非字母数字字符。

只是为了好玩,你可以命名一个 envar %_(){}[]$*+-\/"#',;.@!?%

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

C:\>echo %_(){}[]$*+-\/"#',;.@!?%
xyz
于 2013-12-17T13:46:07.907 回答
6

似乎<>^&|也是有效字符,只要它们被正确转义:

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

C:\>echo %<>^&|%
xyz
于 2017-02-28T10:03:01.350 回答
3

似乎唯一被禁止的字符是等号(“=”) - 来自https://docs.microsoft.com/en-us/windows/win32/procthread/environment-variables

环境变量的名称不能包含等号 (=)。

于 2018-07-03T08:54:36.573 回答