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

Batch file forfiles-FALSE与FALSE(不适用于小写?),batch-file,cmd,Batch File,Cmd,以下是删除当前文件夹中除bat文件以外的所有文件的方法: forfiles /c "cmd /c if @isdir equ FALSE if /i not @ext==\"bat\" del @file" (我找到了) 正如我发现的,如果我将FALSE更改为FALSE,它将不起作用。为什么?这是我的主要问题 还有,附带问题。第一个代码是否等于: forfiles /c "cmd /c if @isdir==FALSE if /i not @ext==\"bat\" del @file" 在

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

forfiles /c "cmd /c if @isdir equ FALSE if /i not @ext==\"bat\" del @file"
(我找到了)

正如我发现的,如果我将
FALSE
更改为
FALSE
,它将不起作用。为什么?这是我的主要问题

还有,附带问题。第一个代码是否等于:

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

在这里可以找到您第一个问题的答案 它说的是。。。 “@ISDIR
如果文件类型是目录,则计算结果为TRUE。否则,此变量计算结果为FALSE。”

可以在此处找到第一个问题的答案 它说的是。。。 “@ISDIR
如果文件类型是目录,则计算结果为TRUE。否则,此变量计算结果为FALSE。“

@isdir
始终以大写形式扩展为
FALSE
TRUE

如果@isdir eq FALSE
是区分大小写的字符串比较,则使用整数比较运算符
eq
FALSE
TRUE
FALSE
进行比较,因为字符串
FALSE
或字符串
TRUE
都不能成功转换为整数,因此返回到字符串比较,有关详细信息,请参阅

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

if /I @isdir == FALSE
如果@isdir==FALSE,则
优于
如果@isdir eq FALSE
,但行为相同

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


如果用于相等字符串比较的命令语法:

IF FirstStringToCompare == SecondStringToCompare Command
或对于包含空格的字符串或
&()[]{}^=;!'+`~

IF "first string to compare" == "second string to compare" "command to execute"
如果与第一个参数字符串用空格字符分隔,则该命令为,在本例中,空格字符为字符串
FALSE
或字符串
TRUE
。要比较的第一个字符串与第二个参数之间用空格隔开,空格为equal运算符
=
。在多出一个空格后,将指定第三个参数,这是要比较的第二个字符串。第三个参数中用空格分隔的最后一个命令是在字符串相等时执行的命令

运算符
==
周围的空格通常被省略,尽管实际上需要将第一个参数和第二个参数以及第二个参数和第三个参数分开。但是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/?
将字符串比较语法显示为:

如果[NOT]string1==string2命令


因此可以假设,只要要比较的字符串本身不包含等号,就不需要使用
==
的左右空格,在这种情况下,有必要将两个字符串都用双引号括起来进行比较。

@isdir
始终在上半部分扩展为
FALSE
TRUE
案例

如果@isdir eq FALSE
是区分大小写的字符串比较,则使用整数比较运算符
eq
FALSE
TRUE
FALSE
进行比较,因为字符串
FALSE
或字符串
TRUE
都不能成功转换为整数,因此返回到字符串比较,有关详细信息,请参阅

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

if /I @isdir == FALSE
如果@isdir==FALSE
,则
优于
如果@isdir eq FALSE
,但行为相同

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


如果用于相等字符串比较的命令语法:

IF FirstStringToCompare == SecondStringToCompare Command
或对于包含空格的字符串或
&()[]{}^=;!'+`~

IF "first string to compare" == "second string to compare" "command to execute"
如果
与第一个参数字符串用空格字符分隔,则该命令为,在本例中,空格字符为字符串
FALSE
或字符串
TRUE
。要比较的第一个字符串与第二个参数之间用空格隔开,空格为equal运算符
=
。在多出一个空格后,将指定第三个参数,这是要比较的第二个字符串。第三个参数中用空格分隔的最后一个命令是在字符串相等时执行的命令

运算符
==
周围的空格通常被省略,尽管实际上需要将第一个参数和第二个参数以及第二个参数和第三个参数分开。但是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/?
将字符串比较语法显示为:

如果[NOT]string1==string2命令


因此可以假设,只要要比较的字符串本身不包含等号,就不需要使用
=
的左右空格,在这种情况下,有必要将两个字符串都用双引号括起来进行比较。

当标准的
FOR
命令可以工作时,为什么要使用
FOR files
很好。
FOR
命令只列出文件。@Squashman我不熟悉bat脚本。提供的解决方案是从我在下面发布的链接复制粘贴的。同一作者的另一个解决方案(
for/f%%f in('dir/b/a-d^ findstr/vile.sdb.sbk.log.bat“”)do del“%%f”
)不起作用