[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] 检查用户闲置时间的批处理有什么问题?什么也不提示就是执行不正确。

  1. @echo off
  2. :loop
  3. REM 检查当前用户的闲置时间
  4. for /f "tokens=2 delims=:" %%a in ('query user ^| findstr /i "idle time"') do set idle=%%a
  5. REM 将闲置时间字符串转换为数字
  6. for /f "tokens=1-2 delims=:" %%a in ("%idle%") do set /a idle=%%a*60+%%b
  7. REM 检查闲置时间是否大于 60 秒(1 分钟)
  8. if !idle! GTR 60 (
  9.   REM 显示 5 秒警告的倒计时
  10.   for /l %%i in (5, -1, 1) do (
  11.     echo 在 %%i 秒内锁定计算机...
  12.     timeout /t 1 > NUL
  13.   )
  14.   REM 锁定计算机
  15.   rundll32.exe user32.dll,LockWorkStation
  16. )
  17. REM 等待 1 秒后再次检查闲置时间
  18. timeout /T 1 > NUL
  19. goto loop
复制代码

回复 1# songdianxue


要在代码里面使用 !idle! 这种变量,需要在第二行加上:
setlocal enabledelayedexpansion

如果仍有问题,请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA

如果需要上传文件,可以用阿里云盘或百度网盘。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

改为%idle%也可以。
一个爱好编程的小学生。

TOP

  1. for /f "tokens=2 delims=:" %%a in ('query user ^| findstr /i "idle time"') do set idle=%%a
  2. for /f "tokens=1-2 delims=:" %%a in ("%idle%") do set /a idle=%%a*60+%%b
复制代码


这两句是矛盾的吧?每一句都用 : 分隔吗

可以试试每一行代码的结果,找下原因
  1. for /f "tokens=2 delims=:" %%a in ('query user ^| findstr /i "idle time"') do set idle=%%a
  2. echo %idle%
  3. pause
  4. for /f "tokens=1-2 delims=:" %%a in ("%idle%") do set /a idle=%%a*60+%%b
  5. echo %idle%
  6. pause
复制代码



另外 我的电脑 'query user' 的结果是这样的,版本差异吗...
USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
1234                   console             1  Active      none   2023/1/4 15:11
bat小白,请多指教!谢谢!

TOP

本帖最后由 songdianxue 于 2023-1-7 10:13 编辑

回复 2# Batcher


    谢谢大神的回复,但是还是不行。
  1. :loop
  2. REM 检查当前用户的闲置时间
  3. for /f "tokens=2 delims=:" %%a in ('query user ^| findstr /i "idle time"') do set idle=%%a
  4. REM 将闲置时间字符串转换为数字
  5. for /f "tokens=1-2 delims=:" %%a in ("%idle%") do set /a idle=%%a*60+%%b
  6. REM 检查闲置时间是否大于 60 秒(1 分钟)
  7. if %idle% GTR 60 (
  8.   REM 显示 5 秒警告的倒计时
  9.   for /l %%i in (5, -1, 1) do (
  10.     echo 在 %%i 秒内锁定计算机...
  11.     timeout /t 1
  12.   )
  13.   REM 锁定计算机
  14.   rundll32.exe user32.dll,LockWorkStation
  15. )
  16. REM 等待 1 秒后再次检查闲置时间
  17. timeout /T 1
  18. goto loop
复制代码
我又把代码改成这样,又出现了不应出现60的错误,请大神再看一下。[img]![]()[/img]

TOP

回复 3# bat1152


    改完后又出现,不应出现60的错误。

TOP

  1. @echo off
  2. :loop
  3. query user >>logQueryuser.txt
  4. timeout 35
  5. goto :loop
复制代码

运行这个,并“闲置”,70秒后关闭,把logQueryuser.txt中的三次结果发上来看看
bat小白,请多指教!谢谢!

TOP

回复 5# songdianxue


先解决乱码问题,请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表