如何检查批处理文件中是否存在变量?

Fiv*_*one 23 windows cmd batch-file

我正在使用call命令:

call beingcalled.bat randomnumber
Run Code Online (Sandbox Code Playgroud)

becalled.bat:

@echo off
set call=%1
echo %call%
set call=%call%%call%
call caller.bat %call%`
Run Code Online (Sandbox Code Playgroud)

caller.bat中:

@echo off
set calltwo=%1
echo %calltwo%
if "%calltwo%"== "" (
    echo Error
) else (
    call beingcalled.bat randomnumber
)
Run Code Online (Sandbox Code Playgroud)

为什么命令if "%calltwo%"== ""不起作用?如何查看是否设置了变量?

Ris*_*hav 30

IF "%Variable%"=="" ECHO Variable is NOT defined
Run Code Online (Sandbox Code Playgroud)

如果Variable的值不包含双引号,这应该有用,但是这样可行.或者你可以试试.两者都适合我.

VERIFY OTHER 2>nul
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 ECHO Unable to enable extensions
IF DEFINED MyVar (ECHO MyVar IS defined) ELSE (ECHO MyVar is NOT defined)
ENDLOCAL
Run Code Online (Sandbox Code Playgroud)

来源http://www.robvanderwoude.com/battech_defined.php

  • `IF "%wefgejroigejrmghuiohrbtg%"=="" ECHO Variable is NOT Defined` 在 Windows 10 20H2 上不会为我输出任何内容。显然,该变量没有定义。 (6认同)
  • 您为什么要悬赏某个问题,以得到您已接受的答案?如果您认为您的答案可以改善,请对其进行更新。 (2认同)
  • 我打开赏金希望有人能给出更好的答案。我的答案虽然有效,但我正在寻找更有效和更好的答案。 (2认同)
  • 您和K4dse都发布的“如果已定义”答案是被认为是最佳做法的方法(尽管第二个答案的前三行不是必需的)。 (2认同)

小智 19

最简单的方法是使用命令行扩展名DEFINED.这也是我这样做的首选方式.

在你的情况下:

@echo off
set calltwo=%1
echo %calltwo%
if defined calltwo (
echo Error
)else (
call beingcalled.bat randomnumber
)
Run Code Online (Sandbox Code Playgroud)

如果这对您不起作用,请在下面的链接中找到解决方法.

问题也是重复:检查是否定义了没有命令扩展且没有使用批处理文件的环境变量?


小智 6

这些解决方案在 Windows 10 上都不适合我,但我确实找到了一个可行的解决方案

IF %foo%==^%foo^% ECHO variable not defined
Run Code Online (Sandbox Code Playgroud)


Phi*_*ley 5

这只是@Rishav 的评论(和赏金)帖子的后续内容

\n\n

这里\xe2\x80\x99是我很久以前学会的一个技巧:

\n\n
@ECHO OFF\n\nSET Foo=%1\n\nECHO ==  Start  ====================\n\nECHO %Foo%\n\nIF %Foo%x == x ECHO Parameter not set\n\nECHO ==  End  ====================\nECHO.\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果未设置该参数,则会检查x==x

\n\n

如果设置了参数(例如,\xe2\x80\x9casdf\xe2\x80\x9d),你会得到一个检查asdfx==x

\n

  • 当变量碰巧有空格时,会出现语法错误。唯一安全的方法是使用引号 `IF "%Variable%"==""` (如接受的答案) (2认同)