如何在Windows批处理中检查环境变量是否已定义

9

我正在尝试创建一个批处理文件来检查环境变量是否已定义或未定义,并在是或否的情况下给出某个输出语句。这是我的代码,但我似乎无法让程序告诉我任何参数是否被定义。

if not defined "%MyVar%" (
    echo MyVar is NOT defined
)

if defined "%MyVar%" (
    echo MyVar IS defined 
)

1
%MyVar%%1 有什么关联? - Compo
@Compo MyVar变量应该是一个“环境变量”,当您在cmd.exe中运行程序并键入带有参数的文件名时,%1指的是该参数。 - DJezus
1个回答

19

我认为你的意思是写成:

if not defined MyVar (
  echo MyVar is NOT defined
)

if defined MyVar (
  echo MyVar IS defined 
)
这是因为cmd.exe会在您将变量括在%字符内时扩展对变量内容的引用。 (您想知道变量本身是否已定义,而不是是否定义了具有该变量内容名称的变量。)
请注意,环境变量(在%字符内的名称)与可替换参数(%0,%1等)不同。
我建议更换为Windows PowerShell,因为它具有内置的参数解析功能,变量范围,真正的函数等等。

所以我将其更改为没有%符号的MyVar。我是否需要指定程序查看特定路径以查看环境变量? - DJezus
如果你想让cmd.exe“评估”这个变量,你必须将它用%字符括起来。 - Bill_Stewart
If Not Defined %1 (Echo=%1 is not defined) Else Echo=%1 is defined 这段代码有什么问题吗? - Compo
%1是一个可替换参数,而不是环境变量。 - Bill_Stewart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接