批处理中如何对比用户输入时间变量与time命令返回结果
批处理定时关机脚本修正方案
原代码问题梳理
- 变量拼写错误:自定义的关机时间变量是
shutdownTime,判断逻辑里误写为shutdowmTime - 命令输出赋值错误:
set time=time /t只会把time /t这个字符串存到变量里,不会实际执行命令获取时间 - 占用系统变量名:
time是系统内置环境变量,直接覆盖会导致其他时间相关逻辑异常 - 无循环延时:死循环无间隔执行会占用大量CPU资源
- 无输入格式提示:没有提前告知用户12小时制的输入规范,容易出现格式不匹配的情况
修正后的可运行代码
@echo off :: 先提示用户查看本地12小时制时间格式 echo 请先确认你的系统12小时制时间格式,当前系统格式示例: time /t echo 请按照上方格式输入关机时间(例如 10:30 PM 或 10:30 下午,根据你系统显示的格式填写) set /p shutdownTime=请输入关机时间: :checkTime :: 捕获time /t的输出赋值给当前时间变量 for /f "delims=" %%a in ('time /t') do set currentTime=%%a if "%currentTime%" EQU "%shutdownTime%" ( echo 到达设定时间,即将执行关机 :: 测试阶段可以注释下方关机命令,测试完成后取消注释即可 :: shutdown /s /f /t 0 pause exit ) :: 每次检查间隔30秒,可根据需求调整间隔时间 timeout /t 30 /nobreak >nul goto checkTime
使用说明
- 测试时先保留关机命令的注释,输入和
time /t输出格式一致的时间测试匹配逻辑,确认正常后再取消关机命令的注释 - 脚本运行后最小化窗口即可后台运行,不会干扰正常操作
- 如果需要取消关机,直接关闭脚本窗口即可,如果已经触发关机可以运行
shutdown /a取消关机操作
内容的提问来源于stack exchange,提问作者Blut_Regnet
相关产品推荐
相关产品推荐

