在实际应用中,如果需要电脑开机后自动判断某值重启时,可以使用如下方式,将bat文件加入系统任务计划开机自动运行中。
@echo off
setlocal enabledelayedexpansion
rem 这里假设文件名为test.txt,你可以根据实际情况修改
set "inputFile=D:/test.txt"
set "tempFile=D:/temp.txt"
if not exist %inputFile% (
echo 1 > %inputFile%
)
if not exist %tempFile% (
echo 1 > %tempFile%
)
rem 循环读取文件中的每一行内容(数字)
for /f "tokens=*" %%a in (%inputFile%) do (
set "num=%%a"
rem 判断数字是否为偶数,偶数的话执行重启命令(这里只是示例,实际中请谨慎操作)
set /a remainder=!num! %% 2
echo !remainder!
if !remainder! equ 0 (
set /a newNum=!num! + 1
echo !newNum! > %tempFile%
move /y %tempFile% %inputFile%
shutdown -r -t 10
)
)
endlocal
代码解释如下:
@echo off用于关闭命令行回显,也就是在脚本执行过程中不会把每条命令本身都显示出来,让界面更简洁。
setlocal enabledelayedexpansion启用延迟环境变量扩展,这在批处理中当需要在循环等结构内动态改变并使用变量值时很有用,比如后面根据读取到的每行数字去做判断和操作变量的情况。
for /f "tokens=*" %%a in (%inputFile%) do (循环读取inputFile中的每一行内容,并将每行内容赋值给%%a(这里tokens=*表示获取整行内容作为一个整体)。
内部通过set "num=%%a"把读取到的每行内容(也就是数字字符串)赋值给变量num,接着使用set /a remainder=!num! %% 2来计算该数字除以 2 的余数(利用算术运算扩展/a),这里!num!是因为启用了延迟扩展来获取到正确的变量值。
if!remainder! equ 0 (判断余数是否为 0,如果是 0 则表示数字是偶数,就执行shutdown /r /t 0来立即重启电脑(再次提醒,实际使用要谨慎对待这个重启操作)。
如果余数不为 0(即数字是奇数),则通过set /a newNum=!num! + 1将数字加1,然后使用echo!newNum! >%tempFile%把新的数字写入到临时文件中(>>表示追加写入,>表示覆盖文件中的内容写入)。
move /y %tempFile% %inputFile%命令将临时文件移动并覆盖原文件(/y参数表示无需确认直接覆盖同名文件),完成整个处理流程。