gpt4 book ai didi

Windows Batch IF !hour! EQU "09"未返回 TRUE

转载 作者:可可西里 更新时间:2023-11-01 10:04:19 25 4
gpt4 key购买 nike

我有一个每 10 分钟更新一次 .txt 文件的应用程序。每天一次,文件在 0900(上午 9 点)之后第一次更新,我想发送该文件的电子邮件。更新后的文件(由第 3 行的 SET 命令指向)的时间戳可以是 0900 到 0910 之间的任何时间。

我打算做的是每天在 0857 运行一个批处理文件,运行 15 分钟检查文件的日期戳,直到时间变​​为 09,然后它发送电子邮件并完成。

在下面用于测试函数的代码摘录中,我遇到了简单比较语句的问题:

 IF !hour! EQU "09" (GOTO :rundailymail) ELSE (Timeout /T 6). 

尽管(根据我运行它时的回显),小时是“09”,但比较返回 false。

要测试它,您需要一个时间戳介于 0900 和 0959 之间的文件。

我很挣扎,并且尝试了很多方法来让它工作(并且我在那里留下了一些诊断)。非常感谢任何帮助或建议。

@echo on
Setlocal EnableDelayedExpansion
SET filename="D:\Temp Files\test.txt"
IF NOT EXIST %filename% GOTO log
rem echo %filedatetime%

for /l %%x in (1, 1, 20) do (
FOR %%f IN (%filename%) DO SET filedatetime=%%~tf
echo !filedatetime!
SET hour= "!filedatetime:~11,-6!"
Echo !hour!
IF !hour! EQU "09" (GOTO :rundailymail) ELSE (Timeout /T 60)
)

:failedtofindfile
ECHO "Failed to find the right file timestamp"
goto end


:rundailymail
ECHO "send the daily email"
goto end

:log
ECHO "FILE MISSING"
goto end

:end

最佳答案

批处理代码没有将带有双引号的字符串分配给环境变量,而是在需要的地方用双引号括起变量引用:

@echo off
setlocal EnableDelayedExpansion
set "FileName=D:\Temp Files\test.txt"
if not exist "%FileName%" goto Log

for /L %%X in (1,1,20) do (
for %%F in ("%FileName%") do set "FileDateTime=%%~tF"
echo !FileDateTime!
set "Hour=!FileDateTime:~11,2!"
echo !Hour!
if "!Hour!" == "09" (
goto RunDailyMail
) else (
timeout /T 60
)
)

:FailedToFindFile
echo Failed to find the right file timestamp
goto End

:RunDailyMail
echo Send the daily email
goto End

:Log
echo FILE MISSING: %FileName%
goto End

:End
endlocal

原始代码失败,因为行中等号后的空格字符

SET hour= "!filedatetime:~11,-6!"

它也像双引号一样分配给变量 hour

因此,比较的字符串是 “09”“09”,并且字符串不相等,正如现在可以在此处看到的那样。

如果字符串比较不使用延迟扩展,则比较可能会成功,因为 hour 的字符串值将带有周围的双引号,而标准扩展的前导空格只是命令 IF 和双引号第一个字符串之间的额外空格导致忽略此额外空间。但是这里需要延迟扩展,因此在字符串比较时不会忽略空格。

设置答案

为什么使用语法 set "variable=string value" 并在需要时在变量引用周围使用双引号来定义变量几乎总是更好。

顺便说一句:对变量名称和标签使用 CamelCase 拼写使它们更易于阅读。

关于Windows Batch IF !hour! EQU "09"未返回 TRUE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38166653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com