forfiles - FALSE与false(不适用于小写?)

时间:2017-12-22 20:39:46

标签: batch-file cmd

以下是删除当前文件夹中除bat文件之外的所有文件的方法:

forfiles /c "cmd /c if @isdir equ FALSE if /i not @ext==\"bat\" del @file"

(我发现它here)。

正如我发现的那样,如果我将FALSE更改为false,则无效。为什么?这是我的主要问题。

另外,附带问题。这是正确的,第一个代码等于:

forfiles /c "cmd /c if @isdir==FALSE if /i not @ext==\"bat\" del @file"

2 个答案:

答案 0 :(得分:5)

@isdir大致扩展为FALSETRUE

if @isdir equ FALSEFALSETRUEFALSE的区分大小写的字符串比较,使用整数比较运算符EQU回退到字符串比较,因为字符串FALSE和字符串TRUE都不能成功转换为整数,有关详细信息,请参阅Symbol equivalent to NEQ, LSS, GTR, etc. in Windows batch files

对于不区分大小写的字符串比较,请在命令行中使用:

if /I @isdir == FALSE

if @isdir==FALSE优于if @isdir equ FALSE,但行为相同。

最好使用if @isdir == FALSE,因为这是100%正确的语法。

IF 命令语法,用于对等式进行字符串比较:

IF FirstStringToCompare == SecondStringToCompare Command

或包含空格或&()[]{}<>|^=;!'+,`~

的字符串
IF "first string to compare" == "second string to compare" "command to execute"

命令 IF 与第一个参数字符串分隔,并带有空格字符,在这种情况下,字符串为FALSE或字符串TRUE。要比较的第一个字符串与第二个参数分隔,空格为等于运算符==。再多一个空格后,指定第三个参数,这是要比较的第二个字符串。最后一个命令再次与第三个参数的空格分隔,是对字符串相等执行的命令。

操作符==周围的空格经常被省略,尽管实际上需要将第一个和第二个以及第三个参数分开。但Windows命令解释程序识别操作符==周围缺少的空格并自动添加它们,因为在写入批处理文件时只能看到两行

if FALSE==FALSE echo It is FALSE.
if   TRUE   ==   FALSE   echo It is FALSE.

并在命令提示符窗口中运行此批处理文件,从而产生输出:

if FALSE == FALSE echo It is FALSE.
It is FALSE.
if TRUE == FALSE echo It is FALSE.

Windows命令解释器预处理后真正执行的命令行在每个参数之间都有一个空格。

在命令提示符窗口if /?中运行的命令 IF 输出的帮助显示字符串比较语法为:

  

IF [NOT] string1 == string2 command

因此可以假设==的左右空间并不是真正需要的,只要要比较的字符串不包含等号,在这种情况下需要将两个字符串括起来进行比较双引号。

答案 1 :(得分:2)

您可以在此处找到第一个问题的答案 https://technet.microsoft.com/en-us/library/cc753551(v=ws.11).aspx 在哪里声明...... “@ISDIR 如果文件类型是目录,则求值为TRUE。否则,此变量的计算结果为FALSE。“