如何检查批处理脚本中的相等性?
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!"
由于引号 ""
围绕着整个表达式,它们不会成为值的一部分。
我正在尝试查找具有特定日期的文件,但我的相等性并没有像我认为的那样起作用。这是我的批处理文件:
@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!"
由于引号 ""
围绕着整个表达式,它们不会成为值的一部分。