Windows批处理文件:否则

| 我正在做一个简单的批处理文件,它需要一个参数(您可以提供更多参数,但我会忽略它们)。 对于测试,这是我到目前为止所拥有的。
if not %1 == \"\" (
    dir /s/b %1
) else (
    echo no
)
基本上,我想说是否提供了一个参数,以递归方式显示文件夹中的所有文件。否则,拒绝。 当我提供一个参数时,它会起作用,但是如果我不提供参数,它只会告诉我
( was unexpected at this time
。 我的意思是,它可以工作,但是我至少要显示一条用户友好的消息,说明为什么它不起作用。我应该如何更改代码?     
已邀请:
if not %1 == \"\" (
一定是
if not \"%1\" == \"\" (
如果没有给出参数,则它是完全空的,甚至不是
\"\"
(在大多数编程语言中代表空字符串)。因此,我们使用周围的引号来检测一个空参数。     
用一些东西围住你的
%1
。 例如:
if not \"%1\" == \"\"
我经常见到的另一个:
if not {%1} == {}
等等... 您可能会猜到,问题是ѭ5被字面上的空白所取代。它不是“空字符串”,实际上是源文件中的空白点。 然后,在替换之后,解释器尝试解析
if
语句并感到困惑。     
您必须执行以下操作:
if \"%1\" == \"\" (
    echo The variable is empty
) ELSE (
    echo The variable contains %1
)
    
另一个相关的技巧是使用\“%〜1 \”而不是\“%1 \”。在Windows的命令行中键入\“ CALL /?\”以获取更多详细信息。     
一种替代方法是设置一个变量,并检查是否已定义:
SET ARG=%1
IF DEFINED ARG (echo \"It is defined: %1\") ELSE (echo \"%%1 is not defined\")
不幸的是,直接将ѭ5和ѭ13一起使用是行不通的。     
你必须这样做... 如果不是\“ A%1 \” == \“ A \” 如果输入参数%1为null, 您的代码将有问题。     

要回复问题请先登录注册