Windows批处理文件:if else

MxL*_*evs 63 windows batch-file

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

为了测试,这是我到目前为止.

if not %1 == "" (
    dir /s/b %1
) else (
    echo no
)
Run Code Online (Sandbox Code Playgroud)

基本上,我想说如果提供了一个参数,递归显示文件夹中的所有文件.否则,说不.

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

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

sch*_*der 74

if not %1 == "" (
Run Code Online (Sandbox Code Playgroud)

一定是

if not "%1" == "" (
Run Code Online (Sandbox Code Playgroud)

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

  • 所以它基本上是一个空值。我得到它。 (2认同)
  • @workabyte:如果`%1`引用路径或文件,使用花括号可能会更加混乱,因为与括号字符`{`和`}`不同,双引号```永远不会出现在任何Windows中路径或文件名.所以你可能会避免试图解决那些解决了`{}}}} == {}`的问题.或许更现实地说,请注意`{{ea14c59a-889c-495b-8bb6-be78cf960e93}.例如,txt} == {{ea14c59a-889c-495b-8bb6-be78cf960e93.txt}}是假的. (2认同)

jwd*_*jwd 19

环绕你%1的东西.

例如:

if not "%1" == ""
Run Code Online (Sandbox Code Playgroud)

我经常看到的另一个:

if not {%1} == {}
Run Code Online (Sandbox Code Playgroud)

等等...

正如你可能猜到的那样,问题在于它%1实际上被空虚所取代.它不是"空字符串",它实际上是源文件中的空白点.

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


小智 12

您必须执行以下操作:

if "%1" == "" (
    echo The variable is empty
) ELSE (
    echo The variable contains %1
)
Run Code Online (Sandbox Code Playgroud)

  • 这里的重要部分是 ELSE 应该与 IF 语句的右括号在同一行,否则你会得到一个错误。 (3认同)

小智 8

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

  • `%~1 - 扩展%1删除任何周围的引号(")`所以没有其他人必须查找它. (3认同)