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

问题描述 投票:1回答:2

以下是删除当前文件夹中除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"

?

batch-file cmd
2个回答
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==FALSEif @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命令

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


2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.