我正在尝试查找具有特定日期的文件,但我的平等并不像我认为的那样有效。这是我的批处理文件:
@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 if check不会被视为2009年?谢谢,抱歉我的批处理文件noobery。
答案 0 :(得分:1)
它实际上是一个空白问题。
在这一行,你在末尾有额外的空格,它被添加到变量中。
set year=!FileDate:~6,4!
答案 1 :(得分:1)
如果您启用了命令扩展,则可以使用==
运算符代替EQU
比较运算符,这意味着可以使用if /?
运算符(请参阅cmd /?
以及{{1} }):
if !year! EQU 2009
这会进行数值比较,因此任何一个值周围的空格都没有效果。
但是,为了避免任何空格成为变量值的一部分(在这种情况下year
包含两个尾随空格),您应该使用set
的以下语法:
set "year=!FileDate:~6,4!"
由于引号""
在整个表达式周围,因此它们不会成为值的一部分。
答案 2 :(得分:0)
请你试试(添加/ a):
设置/一年=!FileDate:~6,4!
你可以参考: https://en.wikibooks.org/wiki/Windows_Batch_Scripting
祝你好运^^ /