中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求1个有如下功能的批处理程序
作者:
标题: 求1个有如下功能的批处理程序 上一主题 | 下一主题
lulala
初级用户





积分 44
发帖 17
注册 2006-9-5
状态 离线
『楼 主』:  求1个有如下功能的批处理程序

操作系统2000,执行一次批处理命令,提示用户在dos中输入每天关机时间,然后保存退出。到那个时间就调用另外一个批处理在那时间自动关机,最好是快速的关机那种,可以做到吗?

2006-9-22 04:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 2 楼』:  

set /p  time

at time

shutdown /s /f

2006-9-22 07:32
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 3 楼』:  

注意: win2000下没有shutdown命令, 要使用下面的批处理, 请楼主请先在winxp的%windir%\sysytem32目录下拷贝shutdown.exe到win2000的相应目录.

@echo off
:index
cls
echo ====================================================
echo.
echo    请在下面输入每天关机的时间.  格式:(08:22)
echo.
echo              取消定时关机请直接回车
echo.
echo ====================================================
echo.
echo.
set time_=
set /p time_=请输入关机时间后按回车键:
if "%time_%"=="" goto cancel
:: 判断错误输入___________________________________________________
for /l %%i in (100,1,123) do (
    for /l %%a in (100,1,159) do (
        if "1%time_:~0,2%"=="%%i" (
            if "1%time_:~3,2%"=="%%a" (
                goto start
            )
        )
    )
)
cls
echo 对不起你的输入有误, 请重新输入!
echo.
pause
goto index
:: 生成定时关机脚本_______________________________________________
:start
if not exist "%ProgramFiles%\timeshut" md "%ProgramFiles%\timeshut"
(echo @echo off
echo shutdown -s -f -t 30
)>"%ProgramFiles%\timeshut\shut.bat"
(echo @echo off
echo at /delete /yes
echo at %time_% "%ProgramFiles%\timeshut\shut.bat"
)>"%ProgramFiles%\timeshut\time.bat"
(echo Windows Registry Editor Version 5.00
echo.
echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
echo "timeshut"="%systemdrive%\\Program Files\\timeshut\\time.bat"
echo.
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedule]
echo "Start"=dword:00000002
)>run.reg
regedit /s run.reg
del run.reg
call "%ProgramFiles%\timeshut\time.bat"
cls
echo =======================
echo 每天定时关机已启动.
echo =======================
echo.
echo.
pause
exit
:: 取消定时关机__________________________________________________
:cancel
if exist "%ProgramFiles%\timeshut" rd /s /q "%ProgramFiles%\timeshut"
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /f /v timeshut
cls
echo ==================
echo 定时关机已取消.
echo ==================
echo.
echo.
pause


草草写了段, 在XP下测试, 还很不完善. 不足的地方请指正!

[ Last edited by pengfei on 2006-9-23 at 04:37 ]



业精于勤而荒于嬉,形成于思而毁于随。
2006-9-22 09:26
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
lulala
初级用户





积分 44
发帖 17
注册 2006-9-5
状态 离线
『第 4 楼』:  

谢谢你啊,发现个问题一定要重新启动机器后才能实现自动关机,开着的时候把电脑时间再往预备关机时间前调一点就不能关机了
还有好象自动关机的时候读5秒后就黑屏了,看的见鼠标能动,但是就是关不掉,有什么办法吗

[ Last edited by lulala on 2006-9-22 at 11:42 ]

2006-9-22 11:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 5 楼』:  

你好!

1. 一定要重启机器才能实现关机, 是因为只有重新启动才能激活计划任务. 修改了代码可以不用重启就激活定时关机的脚本, 但要是你的计划任务没有开启, 还是需要重启电脑的.

2. 把时间再往预备关机时间前调一点就不能关机了. 我想这可能是计划任务的问题. 或者是你测试的时候在两天的临界点

3. 读5秒后就黑屏, 执行了5秒强制关机. 可能系统出了点问题, 这里改为了30自动关闭, 好让应用程序先结束进程, 安全些.

[ Last edited by pengfei on 2006-9-23 at 02:45 ]



业精于勤而荒于嬉,形成于思而毁于随。
2006-9-22 20:24
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
lulala
初级用户





积分 44
发帖 17
注册 2006-9-5
状态 离线
『第 6 楼』:  

我应该谢谢你才对,问题已经解决,程序非常好,太谢谢拉!!
就是在2000下面的时候系统提示您可以安全的关闭计算机了,还要按电源再关,而不是自己关,有什么办法吗

[ Last edited by lulala on 2006-9-22 at 21:46 ]

2006-9-22 21:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
jieok3375
中级用户





积分 282
发帖 130
注册 2006-9-20
来自 广东
状态 离线
『第 7 楼』:  

好好学习。。天天向上啊。。。

偶收了,,慢慢看。。。

2006-9-22 23:08
查看资料  发送邮件  发短消息 网志  OICQ (147385156)  编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by lulala at 2006-9-22 21:34:
就是在2000下面的时候系统提示您可以安全的关闭计算机了,还要按电源再关,而不映...

这个我也没测试过. 建议楼主把标题改一下, 如win2000下的定时关机脚本...



业精于勤而荒于嬉,形成于思而毁于随。
2006-9-23 01:46
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
lulala
初级用户





积分 44
发帖 17
注册 2006-9-5
状态 离线
『第 9 楼』:  

我懂拉,就是每次重新启动后,任务里就多出个任务,原来的任务还在,有at1,at2,at3....,会自动删除吗

2006-9-23 04:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 10 楼』:  

是的, 如果你一天反复启动几次电脑, 所添加的计划任务将向后移.

新建一个计划任务同时删除先前任务的代码已经加入.

at /delete /yes

2006-9-23 04:39
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
lulala
初级用户





积分 44
发帖 17
注册 2006-9-5
状态 离线
『第 11 楼』:  

thx,我试试

2006-9-23 10:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lotus516
高级用户

论坛上抢劫的


积分 551
发帖 246
注册 2006-9-21
状态 离线
『第 12 楼』:  

for /l %%i in (100,1,123) do (
    for /l %%a in (100,1,159) do (
        if "1%time_:~0,2%"=="%%i" (
            if "1%time_:~3,2%"=="%%a" (
                goto start
            )
        )
    )
)
高手们这几代码不太看的懂,请解释一下!!

2006-9-25 11:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 13 楼』:  

Re lotus516:

  pengfei那段代码的功能是检测小时数和分钟数的输入是否正确。

  因为小时数最大不能超过23,分钟数最大不能超过59,而且,输入格式要求,如果小时数如果小于10的话,前面必须带一个0,所以,就用 for 语句中的 /l 开关来取100到123的数字,然后通过在小时数的开头添个1来和 %%i 的值来做比较,如果在那个范围之内,则表明小时数输入正确;对分钟数的输入检测也是同样的道理。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-25 12:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 14 楼』:  

我也来一个:
@echo off
set 密码=
setlocal EnableDelayedExpansion

:index
cls
echo.
echo     ====================================================
echo.
echo          请在下面输入每天关机的时间。  格式:(08:08)
echo.   
echo        取消定时关机请直接回车 (输入“D”显示计划任务)
echo.
echo     ====================================================
echo.
echo.
set time_=
set /p time_=请输入关机时间后按回车键: %Display%

if "%time_%"=="" goto cancel
for %%i in (d D) do if "%time_%"=="%%i" schtasks&pause>nul&exit
if "%time_:~2,1%"==":" (
for /l %%h in (100,1,123) do if "1%time_:~0,2%"=="%%h" (
for /l %%m in (100,1,159) do if "1%time_:~3,2%"=="%%m" goto timing))
set Display=(输入“%time_%”的时间格式错误!)
goto index

:timing
echo.
for /f "skip=3 tokens=1,2* delims= " %%i in ('schtasks') do (
  if "%%i"=="定时关机" set start=%%j
    echo “定时关机”计划任务已存在,于每天 !start:~0,-4! 定时关机!
    echo 如要重新设置,请先取消“定时关机”计划任务。
    pause>nul&exit)
schtasks /Create /SC DAILY /TN "定时关机" /ST %time_%:00 /RU %username% /RP %密码% /TR notepad
echo.&echo 系统于每天 %time_% 定时关机!&pause>nul&exit

:cancel
echo.
for /f "skip=3 tokens=1,2* delims= " %%i in ('schtasks') do (
  if "%%i"=="定时关机" set start=%%j
    schtasks /Delete /TN "定时关机" /F
    echo 系统删除每天 !start:~0,-4! 定时关机的“定时关机”计划任务。
    pause>nul&exit)
echo 没有“定时关机”计划任务!&pause>nul&exit
使用“任务计划”来执行,不需要重启系统即可生效
先“开始菜单-附件-系统工具-计划任务-高级菜单-开始启用高级计划任务程序”,已经开启计划任务的就不用设置了
注意,“schtasks”、“任务计划”需要当前用户设置密码才能使用

“set 密码=”设置密码,也可以后期输入
借用 pengfei 一部分代码修改(效率高些):

  Quote:
if "%time_:~2,1%"==":" (
for /l %%h in (100,1,123) do if "1%time_:~0,2%"=="%%h" (
for /l %%m in (100,1,159) do if "1%time_:~3,2%"=="%%m" goto timing))

先判断输入的时间格式是否是包含有“:”的格式,再判断“小时”是否超过“23”,判断“小时”正确后再判断分钟数是否超过“59”

[ Last edited by zxcv on 2006-9-25 at 14:17 ]

2006-9-26 02:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 15 楼』:  

貌似还需要检查下 任务计划的服务有 没有开吧!

2006-9-26 02:18
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: