Windows批处理文件:if else

时间:2011-04-16 00:22:00

标签: windows batch-file

我正在做一个需要一个参数的简单批处理文件(你可以提供更多,但我忽略它们)。

对于测试,这是我到目前为止所做的。

if not %1 == "" (
    dir /s/b %1
) else (
    echo no
)

基本上,我想说是否提供了参数,递归显示文件夹中的所有文件。否则,说不。

当我提出一个论点时它会起作用,但如果我不提供论证,它只会告诉我( was unexpected at this time

我的意思是,它有效,但我想至少显示一个用户友好的消息,解释它为什么不起作用。我该如何更改代码?

6 个答案:

答案 0 :(得分:72)

if not %1 == "" (

必须是

if not "%1" == "" (

如果没有给出一个参数,它就完全是空的,甚至不是""(它代表了大多数编程语言中的空字符串)。因此,我们使用周围的引号来检测空参数。

答案 1 :(得分:19)

%1包围起来。

例如:

if not "%1" == ""

我经常看到的另一个人:

if not {%1} == {}

等等......

正如您可能猜到的那样,问题是%1实际上被空虚所取代。它不是“空字符串”,它实际上是源文件中的空白点。

然后在替换之后,解释器尝试解析if语句并使其混淆。

答案 2 :(得分:12)

您必须执行以下操作:

if "%1" == "" (
    echo The variable is empty
) ELSE (
    echo The variable contains %1
)

答案 3 :(得分:8)

另一个相关提示是使用“%~1”而不是“%1”。输入“CALL /?”在Windows的命令行中获取更多详细信息。

答案 4 :(得分:4)

另一种方法是设置一个变量,并检查它是否已定义:

SET ARG=%1
IF DEFINED ARG (echo "It is defined: %1") ELSE (echo "%%1 is not defined")

不幸的是,直接在%1上使用DEFINED并不起作用。

答案 5 :(得分:1)

你必须这样做......

如果不是“A%1”==“A”

如果输入参数%1为null, 你的代码会有问题。