检查的环境变量而没有扩展指令集,并且不使用批处理文件中定义的?(Check if an enviro

2019-09-01 22:18发布

我需要使用一个cmd.exe的命令行(cmd.exe的正在从GYP构建工具调用),以确定环境变量是否被定义或没有。 我怎样才能做到这一点? 我还好假设变量值不包含单或双引号,但不能假定启用了命令扩展。

我试过以下,这在.bat文件中的伟大工程,但在命令行上直接输入失败:

IF "%UNDEFINED%" == "" (echo yes)

当确切的行是一个.bat文件并执行,我看yes作为输出。 当我在命令行上输入它,则输出是空的。 我在Windows XP SP3测试这一点,虽然我的同事看到在Windows 7中相同的结果,这是建议的方法http://support.microsoft.com/kb/121170和http://www.robvanderwoude.com/ battech_defined.php 。 我不希望使用IF DEFINED UNDEFINED (echo yes) ,因为如果命令扩展被禁用,将无法正常工作。

在下面的帖子中得票最多的答案使我相信,这个问题涉及到如何百分号展开在“CmdLineParser”不同的处理方式与在“BatchLineParser”,但仍然没有使我的解决方案: 如何并在Windows命令解释器(CMD.EXE)解析脚本?

Answer 1:

OK,这花了一点,但我想我已经想通了。 试试这个:

SET UNDEFINED 2>Nul | Findstr/I "."
IF ERRORLEVEL 1  ECHO Not Defined.

这适用于所有情况下AFAIK,并且不依赖于任何命令扩展功能。



Answer 2:

Errr ...只是:

if defined your-var-name ( 
    echo yarp
) else (
    echo narp
)

我要补充,我不相信这需要扩展指令集...



Answer 3:

如果扩展真的禁用(我不能相信这一点),
那么你可以尝试不同的方法。

IF %UNDEFINED% == %^UNDEFINED% (echo yes)

这工作,就好像undefined不存在,那么它不会被替换,也^undefined ,但光标将在下一阶段的解析器被删除,所以%undefined%是针对比较%undefined% 。 缺点是缺少的报价,因为他们也使对特殊字符表达稳定。

更好的办法是使用IF defined ,但是,当附加信息已停用您需要先启用它们。

cmd /E:on /c "if not defined undefined echo It's undefined"

最好的方法就是使用一个批处理文件,也应与GYP构建系统工作。



Answer 4:

我想这和它的工作:

@echo off

setlocal disableextensions

set x=%path%
if "%x%"=="" (echo "PATH" does not exist) else (echo "PATH" exists)

set x=%pathx%
if "%x%"=="" (echo "PATHX" does not exist) else (echo "PATHX" exists)

endlocal

它返回:

"PATH" exists
"PATHX" does not exist


Answer 5:

IF NOT %CODE%==? do stuff.

这适用于W98命令行和在一个批处理文件,所以它应该在任何地方从早期的MS-DOS开始,没有必要的扩展工作。 它假定CODE被有效设置或根本没有设置。

这导致一个语法错误,如果代码不存在,或者什么也不做,如果代码是一个问号(选择,因为它不可能在一个路径存在)。 无论哪种方式,什么也不做。 未使得如果代码出现到被设置为有用的东西肯定行动只取。

我用它在编译器批处理文件,以确定是否使用相对路径或使用固定的基本目录如果一个在CODE可变设定。 它可以让我做一个编码树移植,而不必修改所有的批处理文件的每个程序,如果我移动了一切。



文章来源: Check if an environment variable is defined without command extensions and without using a batch file?