If statement 在IF语句中设置变量(批处理)?

If statement 在IF语句中设置变量(批处理)?,if-statement,batch-file,set,If Statement,Batch File,Set,好的,我得到了这个基本的IF语句。我想根据用户名设置一个用户角色。但看起来似乎set语句从未执行过,因此我得到了一个空的回音 if "%username%" == "admin" ( set role = "admin" ) else ( set role = "user" ) echo %role% 我是否遗漏了一些内容,或者可能是Windows不支持这些内容?删除空格。现在,您正在为环境变量role设置一个值(带有堆栈溢出不会显示的尾随空格)。此外,角色变为“admin”

好的,我得到了这个基本的IF语句。我想根据用户名设置一个用户角色。但看起来似乎set语句从未执行过,因此我得到了一个空的回音

if "%username%" == "admin" (
    set role = "admin"
) else (
    set role = "user"
)

echo %role%

我是否遗漏了一些内容,或者可能是Windows不支持这些内容?

删除空格。现在,您正在为环境变量
role
设置一个值(带有堆栈溢出不会显示的尾随空格)。此外,角色变为
“admin”
(包括引号和前导空格,也就是说,此处不可见)

您可以通过从命令行运行
set
而不使用参数来验证这一点。它将为您提供所有变量的列表,您可以在其中清楚地看到不需要的空间

if "%username%" == "admin" (
    set role=admin
) else (
    set role=user
)

echo %role%
仍然需要在if语句中加引号的唯一原因是,如果
%username%
不存在/为空,则该语句将变得无效。在这种情况下,该行将变为:

if == admin (
。。。这当然是无效的。它甚至不需要引号,你也可以写:

if %username%XYZ == adminXYZ (

删除空格。现在,您正在为环境变量
role
设置一个值(带有堆栈溢出不会显示的尾随空格)。此外,角色变为
“admin”
(包括引号和前导空格,也就是说,此处不可见)

您可以通过从命令行运行
set
而不使用参数来验证这一点。它将为您提供所有变量的列表,您可以在其中清楚地看到不需要的空间

if "%username%" == "admin" (
    set role=admin
) else (
    set role=user
)

echo %role%
仍然需要在if语句中加引号的唯一原因是,如果
%username%
不存在/为空,则该语句将变得无效。在这种情况下,该行将变为:

if == admin (
。。。这当然是无效的。它甚至不需要引号,你也可以写:

if %username%XYZ == adminXYZ (