Joh*_*ann 37 windows cmd batch-file
我需要使用cmd.exe命令行(从gyp构建工具调用cmd.exe)来确定是否定义了环境变量.我怎样才能做到这一点?我可以假设变量值不包含单引号或双引号,但不能假设启用了命令扩展.
我尝试了以下内容,它在.bat文件中运行良好,但在命令行上直接输入时失败:
IF "%UNDEFINED%" == "" (echo yes)
Run Code Online (Sandbox Code Playgroud)
当该确切行在.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)解析脚本吗?
Sim*_*lin 33
呃...只是:
if defined your-var-name (
echo yarp
) else (
echo narp
)
Run Code Online (Sandbox Code Playgroud)
我应该补充一点,我不相信这需要命令扩展......
如果扩展名真的被禁用(我不敢相信),
那么你可以尝试不同的方式.
IF %UNDEFINED% == %^UNDEFINED% (echo yes)
Run Code Online (Sandbox Code Playgroud)
这样就好像undefined不存在然后它不被替换,^undefined但是插入符号将在下一个解析器阶段被删除,因此%undefined%被比较%undefined%.缺点是缺少引号,因为它们也使表达式对特殊字符稳定.
更好的方法是使用IF defined,但是当禁用扩展时,您需要先启用它们.
cmd /E:on /c "if not defined undefined echo It's undefined"
Run Code Online (Sandbox Code Playgroud)
最好的方法是简单地使用批处理文件,该文件也应该与gyp构建系统一起使用.
好吧,这需要一点点,但我想我已经弄明白了.试试这个:
SET UNDEFINED 2>Nul | Findstr/I "."
IF ERRORLEVEL 1 ECHO Not Defined.
Run Code Online (Sandbox Code Playgroud)
这适用于所有情况AFAIK,并且不依赖于任何命令扩展功能.
我试过这个并且它有效:
@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
Run Code Online (Sandbox Code Playgroud)
它返回:
"PATH" exists
"PATHX" does not exist
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55940 次 |
| 最近记录: |