标题: [系统相关] 检查用户闲置时间的批处理有什么问题?什么也不提示就是执行不正确。 [打印本页]
作者: songdianxue 时间: 2023-1-4 10:41 标题: 检查用户闲置时间的批处理有什么问题?什么也不提示就是执行不正确。
- @echo off
-
- :loop
-
- REM 检查当前用户的闲置时间
-
- for /f "tokens=2 delims=:" %%a in ('query user ^| findstr /i "idle time"') do set idle=%%a
-
- REM 将闲置时间字符串转换为数字
-
- for /f "tokens=1-2 delims=:" %%a in ("%idle%") do set /a idle=%%a*60+%%b
-
- REM 检查闲置时间是否大于 60 秒(1 分钟)
- if !idle! GTR 60 (
- REM 显示 5 秒警告的倒计时
- for /l %%i in (5, -1, 1) do (
- echo 在 %%i 秒内锁定计算机...
- timeout /t 1 > NUL
- )
-
- REM 锁定计算机
- rundll32.exe user32.dll,LockWorkStation
- )
-
- REM 等待 1 秒后再次检查闲置时间
- timeout /T 1 > NUL
- goto loop
复制代码
作者: Batcher 时间: 2023-1-4 10:49
回复 1# songdianxue
要在代码里面使用 !idle! 这种变量,需要在第二行加上:
setlocal enabledelayedexpansion
如果仍有问题,请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
如果需要上传文件,可以用阿里云盘或百度网盘。
如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: bat1152 时间: 2023-1-4 15:28
改为%idle%也可以。
作者: 77七 时间: 2023-1-4 16:48
- for /f "tokens=2 delims=:" %%a in ('query user ^| findstr /i "idle time"') do set idle=%%a
-
- for /f "tokens=1-2 delims=:" %%a in ("%idle%") do set /a idle=%%a*60+%%b
复制代码
这两句是矛盾的吧?每一句都用 : 分隔吗
可以试试每一行代码的结果,找下原因
- for /f "tokens=2 delims=:" %%a in ('query user ^| findstr /i "idle time"') do set idle=%%a
- echo %idle%
- pause
- for /f "tokens=1-2 delims=:" %%a in ("%idle%") do set /a idle=%%a*60+%%b
- echo %idle%
- pause
复制代码
另外 我的电脑 'query user' 的结果是这样的,版本差异吗...
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
1234 console 1 Active none 2023/1/4 15:11
作者: songdianxue 时间: 2023-1-7 10:04
本帖最后由 songdianxue 于 2023-1-7 10:13 编辑
回复 2# Batcher
谢谢大神的回复,但是还是不行。- :loop
-
- REM 检查当前用户的闲置时间
-
- for /f "tokens=2 delims=:" %%a in ('query user ^| findstr /i "idle time"') do set idle=%%a
-
- REM 将闲置时间字符串转换为数字
-
- for /f "tokens=1-2 delims=:" %%a in ("%idle%") do set /a idle=%%a*60+%%b
-
- REM 检查闲置时间是否大于 60 秒(1 分钟)
- if %idle% GTR 60 (
- REM 显示 5 秒警告的倒计时
- for /l %%i in (5, -1, 1) do (
- echo 在 %%i 秒内锁定计算机...
- timeout /t 1
- )
-
- REM 锁定计算机
- rundll32.exe user32.dll,LockWorkStation
- )
-
- REM 等待 1 秒后再次检查闲置时间
- timeout /T 1
- goto loop
复制代码
我又把代码改成这样,又出现了不应出现60的错误,请大神再看一下。[img]![]()[/img]
作者: songdianxue 时间: 2023-1-7 10:17
回复 3# bat1152
改完后又出现,不应出现60的错误。
作者: 77七 时间: 2023-1-7 13:38
- @echo off
- :loop
- query user >>logQueryuser.txt
- timeout 35
- goto :loop
复制代码
运行这个,并“闲置”,70秒后关闭,把logQueryuser.txt中的三次结果发上来看看
作者: Batcher 时间: 2023-1-7 20:24
回复 5# songdianxue
先解决乱码问题,请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |