Windows 如何查看是否通过批处理脚本定义了环境变量?

Windows 如何查看是否通过批处理脚本定义了环境变量?,windows,batch-file,cmd,environment-variables,Windows,Batch File,Cmd,Environment Variables,我正在编写一个批处理脚本,以使用现有的环境变量(如果存在)。如果没有,我需要创建环境变量。当env变量名已经存在时,下面的代码可以正常运行。当env变量不存在时,它会以flash的形式弹出 set "my_path=%ENV_VARIABLE_NAME%" IF %my_path%=="" ( echo no path found set "my_path = C:/Users/xyz/" ) ELSE ( echo

我正在编写一个批处理脚本,以使用现有的环境变量(如果存在)。如果没有,我需要创建环境变量。当env变量名已经存在时,下面的代码可以正常运行。当env变量不存在时,它会以flash的形式弹出

set "my_path=%ENV_VARIABLE_NAME%"
IF %my_path%=="" (
   echo no path found
   set "my_path = C:/Users/xyz/"
) ELSE (
   echo path found
)
pause
语法是:

IF defined my_path

如果/?

您的主要问题是线路,请参阅帮助

IF %my_path%=="" (
当变量为空时,将解析为

IF =="" (
这是不正确的语法。解析器显示一条错误消息,并在双击窗口时关闭窗口,结束解析

正确的语法应该是引用比较的两面:

IF "%my_path%" == ""
尽管我更喜欢@jeb的解决方案:如果定义了我的路径

代码中还有另一个问题:

set "my_path = C:/Users/xyz/"
将变量%my_path%设置为C:/Users/xyz/-不是您想要的。正确答案是:

set "my_path=C:\Users\xyz\"

注意:Windows中正确的路径分隔符是反斜杠,而不是斜杠。这是我用来执行代码中提供的任务的机制

@如果未定义环境变量名称 没有找到路径。 设置我的路径=C:\Users\xyz 其他的 找到回音路径。 设置我的路径=%ENV\u变量\u名称% 或作为一条没有不必要回声的单行线:

@如果未定义环境变量名称,请设置我的路径=C:\Users\xyz,否则请设置我的路径=%ENV\u VARIABLE\u NAME% 或者:

@如果定义了环境变量名称 找到回音路径。 设置我的路径=%ENV\u变量\u名称% 其他的 没有找到路径。 设置我的路径=C:\Users\xyz 或作为一条没有不必要回声的单行线:

@如果定义了环境变量名称,请设置我的路径=%ENV\u VARIABLE\u NAME%Else设置我的路径=C:\Users\xyz 值得注意的是,使用IF Defined不仅仅是检查变量的一种不同方法,它通常是一种更好的方法,因为它提供了两个增强功能:

因为它没有明确检查变量的内容,而是在运行命令时查找名称

这意味着,如果变量的内容很难正确转义,则不会出现任何问题

这也意味着无论是否使用延迟扩展,该命令都可以在循环或括号中使用,因为它的查找严格来说是一个命令,因此必须在执行时而不是在预执行时执行

您还可以使用SET | FIND MYVar=复制此功能,因为这同样需要运行SET命令,并在执行时检查环境的状态,而不是预执行。

尽管我更喜欢@jeb的解决方案-我更喜欢您的答案,但它更广泛:-