如何在批处理脚本中检查相等性?

3

我正在尝试找到特定日期的文件,但我的相等性似乎没有按照我期望的那样工作。这是我的批处理文件:

@echo off
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

chdir /d T:

FOR /r %%i IN (*) do (
   echo %%i

   set FileDate=%%~ti
   echo Date: !FileDate!

   set year=!FileDate:~6,4!  
   echo year: !year!

   if !year! == 2009 (
      echo is 2009
   ) else (
      echo not 2009
   )
)

当我运行它时,会得到以下输出:

T:\SomeFile.txt
Date: 09/11/2009 02:51 PM
year: 2009
not 2009

有人能否解释一下为什么年份打印出来是2009,但在if语句中不被视为2009?谢谢,抱歉我的批处理小白。

3个回答

3

如果您启用了命令扩展(请参阅if /?cmd /?),则可以使用EQU运算符代替字符串比较的==运算符:

if !year! EQU 2009

这个操作进行数字比较,因此值周围的空格没有影响。


然而,为了避免任何空格成为变量值的一部分(在这种情况下,year 包含两个尾随空格),您应该使用以下语法的 set

set "year=!FileDate:~6,4!"

由于引号""围绕整个表达式,因此它们不成为值的一部分。


1

实际上这是一个空格问题。

在这一行,您在末尾添加了额外的空格,这些空格被添加到变量中。

set year=!FileDate:~6,4!  

2
因此,为了避免这个问题,方便起见,最好将变量和值都用引号括起来:set "year=!FileDate:~6,4!" - Aacini

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接