找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 22076|回复: 7

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

[复制链接]
发表于 2023-1-4 10:41:28 | 显示全部楼层 |阅读模式
  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
复制代码
发表于 2023-1-4 10:49:14 | 显示全部楼层
回复 1# songdianxue


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

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

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

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
发表于 2023-1-4 15:28:53 | 显示全部楼层
改为%idle%也可以。
发表于 2023-1-4 16:48:23 | 显示全部楼层
  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
 楼主| 发表于 2023-1-7 10:04:34 | 显示全部楼层
本帖最后由 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]
 楼主| 发表于 2023-1-7 10:17:33 | 显示全部楼层
回复 3# bat1152


    改完后又出现,不应出现60的错误。
发表于 2023-1-7 13:38:59 | 显示全部楼层
  1. @echo off
  2. :loop
  3. query user >>logQueryuser.txt
  4. timeout 35
  5. goto :loop
复制代码

运行这个,并“闲置”,70秒后关闭,把logQueryuser.txt中的三次结果发上来看看
发表于 2023-1-7 20:24:05 | 显示全部楼层
回复 5# songdianxue


先解决乱码问题,请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 06:40 , Processed in 0.019942 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表