我正在做一个需要一个参数的简单批处理文件(你可以提供更多,但我忽略它们)。
对于测试,这是我到目前为止所做的。
if not %1 == "" (
dir /s/b %1
) else (
echo no
)
基本上,我想说是否提供了参数,递归显示文件夹中的所有文件。否则,说不。
当我提出一个论点时它会起作用,但如果我不提供论证,它只会告诉我( was unexpected at this time
。
我的意思是,它有效,但我想至少显示一个用户友好的消息,解释它为什么不起作用。我该如何更改代码?
答案 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, 你的代码会有问题。