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

How to check for equality in batch script?

我正在尝试查找具有特定日期的文件,但我的相等性并没有像我认为的那样起作用。这是我的批处理文件:

@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 年吗?感谢并为我的批处理文件笨拙感到抱歉。

实际上是空格问题。

在这一行的末尾有额外的空格被添加到变量中。

set year=!FileDate:~6,4!  

你能试试 (add /a):

set /a year=!FileDate:~6,4!

您可以参考: https://en.wikibooks.org/wiki/Windows_Batch_Scripting

祝你好运^^/

您可以使用 EQU 运算符而不是 == 比较运算符(表示字符串比较)——如果您启用了命令扩展(请参阅 if /? 以及 cmd /?):

if !year! EQU 2009

这会进行数值比较,因此任何一个值周围的空格都无效。


但是,为了避免任何空格成为变量值的一部分(在本例中 year 包含两个尾随空格),您应该使用 set 的以下语法:

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

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