无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 3258|回复: 8
打印 上一主题 下一主题

请教个批处理的问题

[复制链接]
跳转到指定楼层
1#
发表于 2011-12-11 13:34:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想做一个定时关机批处理
用at 指令实现  
现在是要判断 at 指令是否已经执行过了(防止多次开机重复执行"at")
如何用批处理分析at指令的执行情况?
2#
发表于 2011-12-11 21:22:17 | 只看该作者
假如在12:30:00定时关机:
----------------------------分割线----------------------------
@echo off
setlocal enabledelayedexpansion
set b=0&set t=12:30:00
for /f "delims=" %%i in ('at ^|findstr /i /c:"shutdown"') do set/a b+=1
if "!b!"=="0" (at !t! shutdown -s -t 0) else (echo 已设置!t!定时关机&pause&goto :eof)
pause
----------------------------分割线----------------------------
仅供参考。
另外楼主可考虑用添加计划任务的方式,不必担心多次重复执行的问题了。
回复

使用道具 举报

3#
发表于 2011-12-11 23:32:57 | 只看该作者
原帖由 fghlw 于 2011-12-11 13:34 发表
我想做一个定时关机批处理
用at 指令实现  
现在是要判断 at 指令是否已经执行过了(防止多次开机重复执行"at")
如何用批处理分析at指令的执行情况?

为系统添加一个名为验证(NZ)的环境变量,持行AT命令时,比较(NZ)的值是否为今天. 如果不是则持行AT命令
顺便说下楼主,都这等级了,发个贴子怎么挂个万能标题"请教个批处理的问题"不能改成"请教个AT命令持行与否的问题?"

  1. @echo off
  2. set t=12:30:00
  3. if not defined nz (
  4. echo. 检测到您的电脑是第一次运行本程序.
  5. echo. 回车将设定环境变量重启机
  6. echo. 不持行操作请关闭本窗口&pause
  7. reg add hkcu\environment /v nz /d date /f
  8. shutdown -r -t 0
  9. )
  10. if '%nz%'=='%date:~0,10%' (echo.今天己运行) else (
  11. at %t% shutdown -s -t 0||ECHO.AT命令无法持行,请开启相关的服务.
  12. reg add hkcu\environment /v nz /d %date:~0,10% /f
  13. )
复制代码
回复

使用道具 举报

4#
 楼主| 发表于 2011-12-12 13:41:28 | 只看该作者
谢谢  楼上的几位
昨天研究了下
for /f "delims=" %%i in ('at') do (for /f "tokens=3 delims= " %%n in ("%%i") do (if %%n==7:27 goto end))
现在用这个实现了
回复

使用道具 举报

5#
 楼主| 发表于 2011-12-12 13:43:59 | 只看该作者
3楼的  不好意思 嘿嘿  这等级只是熬出来的
我现在的代码是这样的:

@echo off

set t=%time: =0%
set tt=%t::=%

if "%tt:~0,4%" GTR "0655" (goto shut) else (goto end)

:shut
for /f "delims=" %%i in ('at') do (for /f "tokens=3 delims= " %%n in ("%%i") do (if %%n==17:27 goto end))
at 17:27 shutdown -s -t 180 -c "准备下班喽~~" -f
goto end

:end
exit

用了循环嵌套 直接分析 'at' 命令的返回信息

[ 本帖最后由 fghlw 于 2011-12-12 13:50 编辑 ]
回复

使用道具 举报

6#
发表于 2011-12-12 16:05:57 | 只看该作者
原帖由 fghlw 于 2011-12-12 13:43 发表
3楼的  不好意思 嘿嘿  这等级只是熬出来的
我现在的代码是这样的:

@echo off

set t=%time: =0%
set tt=%t::=%

if "%tt:~0,4%" GTR "0655" (goto shut) else (goto end)

:shut
for /f "delims= ...



   ........................

    早于,6:55就不运行,晕死, 设计得不算科学喔. 如果要守时的话应当是超过17:27分就不运行.

  1. at|findstr /i /c:"17:27" 2>nul&&exit
  2. set t=%time: =0%
  3. set t=%t::=%
  4. if "%t:~0,4%" LSS "1727" (at 17:27 shutdown -s -t 30 -c "吃饭去咯~") else (exit)
复制代码


 
回复

使用道具 举报

7#
 楼主| 发表于 2011-12-12 17:01:51 | 只看该作者
嘿嘿  那是因为我不可能在那个时间之前出现在办公室。。
这个只是实现功能了  想判断时间段  也很简单了
回复

使用道具 举报

8#
发表于 2011-12-12 21:19:34 | 只看该作者
明白楼主的意图了,呵呵。。。

建议添加计划任务,每次在系统启动时运行一次就行。个人觉得比双击P处理方便,也不必担心重复运行多次。

@echo off
at /del /y
at 17:27 shutdown  -s -t 180 -c "准备下班喽~~" -f
exit

假设保存在C:\1.BAT,在计划任务的“启动程序”中指定为"start /min C:\1.BAT" 就OK。

只是建议,个人习惯不同,或许楼主觉得这样没有P方便,呵呵。。。
回复

使用道具 举报

9#
 楼主| 发表于 2011-12-12 23:14:55 | 只看该作者
谢楼上
实际上这批处理就是开机执行的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-16 22:28

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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