通过批处理判断文件夹内修改时间和系统时间差来在执行重启就正常了?

接收程序时不时会掉线,重启后就正常了,通过D:\log文件夹内的日志刷新时间与系统时间对比存在3分钟时间差就启动D:\1.bat

是的,你可以通过批处理脚本来实现这样的逻辑。以下是一个简单的批处理示例,它检查指定文件夹中的文件的修改时间与系统时间的差异,并在差异达到一定阈值时执行重启操作:
@echo off
setlocal enabledelayedexpansion

set "logFolder=D:\log"
set "thresholdMinutes=3"
set "batFile=D:\1.bat"

for /f %%a in ('dir /b /o-d /a-d "%logFolder%" ^| findstr ".*"') do (
set "logFile=!logFolder!\%%a"
set "fileTimestamp="

for /f "tokens=1,2 delims= " %%b in ('dir /TW "!logFile!" ^| find "!"') do (
set "fileTimestamp=%%b %%c"
)

if defined fileTimestamp (
echo File Timestamp: !fileTimestamp!

rem 获取系统时间
for /f "delims=" %%d in ('wmic os get LocalDateTime ^| find "."') do set "systemTimestamp=%%d"
set "systemTimestamp=!systemTimestamp:~0,4!!systemTimestamp:~4,2!!systemTimestamp:~6,2!!systemTimestamp:~8,2!!systemTimestamp:~10,2!!systemTimestamp:~12,2!"

echo System Timestamp: !systemTimestamp!

rem 计算时间差
set "diff=!fileTimestamp:~0,12!-!systemTimestamp:~0,12!"
set /a "diffMinutes=!diff:~-4!"
echo Time Difference: !diffMinutes! minutes

rem 判断时间差是否超过阈值
if !diffMinutes! geq %thresholdMinutes% (
echo Restarting...
call "%batFile%"
) else (
echo No restart needed.
)
) else (
echo Failed to get file timestamp.
)
exit /b
)

这个脚本首先获取指定文件夹中最新修改的文件的时间戳,然后获取系统当前时间戳,计算两者之间的时间差,如果时间差超过了设定的阈值,就执行你指定的重启脚本。请记得根据实际情况修改脚本中的文件夹路径、阈值和重启脚本路径。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-12-06
您提到的问题看起来是一个接收程序时不时会掉线的问题,而重启后又能恢复正常。使用批处理文件(Batch file)来监测文件夹内的文件修改时间与系统时间的差异,并在特定条件下执行重启操作,确实是一个可行的解决方案。这种方法可以作为一种临时的自动化修复手段,直到找到并解决掉线的根本原因。
这里是一个简单的批处理脚本示例,用于判断文件夹内最后修改时间,并在满足特定条件时重启程序或计算机:
@echo off
setlocal

:: 设置监控的文件夹路径
set "FolderPath=C:\Path\To\Your\Folder"

:: 设置时间差阈值(单位:分钟)
set /a "TimeDiffThreshold=30"

:: 获取当前系统时间和日期
for /f "tokens=1-5 delims=/: " %%a in ("%time% %date%") do (
set "currentHour=%%a"
set "currentMinute=%%b"
set "currentDay=%%d"
set "currentMonth=%%e"
set "currentYear=%%f"
)

:: 获取文件夹内最后修改的文件的时间和日期
for /f "tokens=1-5 delims=/: " %%a in ('dir "%FolderPath%" /a-d /o-d /t:w /b') do (
set "fileHour=%%a"
set "fileMinute=%%b"
set "fileDay=%%d"
set "fileMonth=%%e"
set "fileYear=%%f"
goto compare
)

:compare
:: 计算时间差
set /a "HourDiff=currentHour-fileHour"
set /a "MinuteDiff=currentMinute-fileMinute + HourDiff*60"

:: 判断时间差是否超过阈值
if %MinuteDiff% gtr %TimeDiffThreshold% (
echo Time difference is greater than threshold. Initiating restart...
:: 这里可以添加重启程序或计算机的命令
:: 例如:shutdown /r /t 0
) else (
echo Time difference is within the threshold.
)

endlocal
请注意,这个脚本需要根据您的实际环境和需求进行相应的修改。另外,这只是一个基础的示例,实际应用中可能需要考虑更多的因素,例如不同时间格式、错误处理等。
重要提示:频繁重启可能只是掩盖了问题,而不是真正解决问题。建议同时寻找掉线的根本原因,如网络问题、软件错误或硬件故障,并采取相应的解决措施。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网