Windowsbatch file:如果其他

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

为了testing,这是我迄今为止。

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

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

它提供了一个论点,但如果我不提供一个它会告诉我( was unexpected at this time

我的意思是,它的工作,但我想至less显示一个用户友好的信息,解释为什么它不工作。 我应该如何更改代码?

 if not %1 == "" ( 

一定是

 if not "%1" == "" ( 

如果没有给出一个参数,它是完全空的,甚至不是"" (在大多数编程语言中表示一个空string)。 所以我们用周围的引号来检测一个空的参数。

围绕你的%1的东西。

例如:

 if not "%1" == "" 

另一个我经常见到的:

 if not {%1} == {} 

等等…

正如你可能猜到的那样,问题在于%1被空虚所替代。 这不是一个“空string”,它实际上是源文件中的一个空白处。

然后在replace之后,解释器试图parsingif语句并且感到困惑。

你必须做到以下几点:

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

另一个相关的提示是使用“%〜1”而不是“%1”。 input“CALL /?” 在Windows的命令行中获取更多细节。

另一种方法是设置一个variables,并检查它是否被定义:

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

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

你必须这样做…

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

如果input参数%1为空,那么你的代码将会有问题。