Board logo

标题: [求助][DOS]纯DOS下如何判断时间? [打印本页]

作者: lihkk     时间: 2008-11-28 12:06    标题: [求助][DOS]纯DOS下如何判断时间?

如题,如果当前时间晚于特定时间段即执行某一命令。
例:若当前系统时间晚于9:00p即令系统关机。
请较大虾如何实现?
多谢!
作者: wangff     时间: 2008-11-28 14:55

@echo off
:loop
set t=%time: =0%
if "07:00"=="%t:~0,5%" echo %t%
ping -n 2 127.1>nul
goto loop
将echo %t%换成关机
作者: sea1112     时间: 2008-11-28 14:56


  Quote:
Originally posted by lihkk at 2008-11-28 12:06 PM:
如题,如果当前时间晚于特定时间段即执行某一命令。
例:若当前系统时间晚于9:00p即令系统关机。
请较大虾如何实现?
多谢!

方法一:

at /?
shutdown /?
两命令结合完成

方法二:
不停看时间,时间一到就运行。
注:cpu 使用会好高的,不好。
@echo off
:s
if "%time:~0,5%"=="9:00" 关机命令
ping -n 2 127.1>nul
goto s
作者: yishanju     时间: 2008-11-28 15:04
人家楼主说的是纯DOS
作者: sea1112     时间: 2008-11-28 17:34


  Quote:
Originally posted by yishanju at 2008-11-28 03:04 PM:
人家楼主说的是纯DOS

晕,这样这台机不就只做一件事情吗,“等关机电脑”

我想不是说真的纯DOS吧,纯DOS用不到等关机的命令吧。

[ Last edited by sea1112 on 2008-11-28 at 17:36 ]
作者: lihkk     时间: 2008-11-28 18:55
的确,需求是纯DOS下。
关机 —— 已找到适用的命令fdapm.com
定时 —— 看到有很多类似的求助贴,皆没有正解。

找到一个与定时相关的,但又搞不懂:
http://www.moon-soft.com/program/bbs/readelite1850.htm

或者请教大虾,纯DOS下如何判断时间大小?
例: 如果 %当前时间% 小于(或大于) %指定时间% 则 执行xxxxxx
作者: DOSforever     时间: 2008-11-28 20:15


  Quote:
Originally posted by sea1112 at 2008-11-28 17:34:

晕,这样这台机不就只做一件事情吗,“等关机电脑”

我想不是说真的纯DOS吧,纯DOS用不到等关机的命令吧。

[ Last edited by sea1112 on 2008-11-28 at 17:36 ]

为什么不可以是真的纯DOS?那么什么是假的纯DOS?本来加个纯字就多此一举,请问什么是不纯的 DOS ?或者请告诉我纯 Windows 和不纯 Windows 的区别。人家已经写明了纯 DOS ,请问还要怎么“纯”?
作者: DOSforever     时间: 2008-11-28 20:21
回正题:
PC Tools 9.0 中有个 SCHEDULE 可以在计划的时间中执行所设定的任务,不过在运行前先要运行 CPTASK 。Windows 中的计划任务我估计就是从它那里学来的。
作者: lianjiang2004     时间: 2008-11-28 20:39
即使写了“纯dos”,有人还是理解成cmd,
看来加个“纯”字,尽管不科学,不准确,但很有必要,呵呵。
作者: DOSforever     时间: 2008-11-29 16:41
呵呵,这事就和方便面广告一样:
“本品不含防腐剂”
“本品绝不含防腐剂”
“本品100%不含防腐剂”
“本品100%保证不含防腐剂”
请问到底哪个才是真的不含防腐剂?

越是过多的强调就越是说明心虚,有就有,没有就没有;是就是,不是就不是。

假如某企业委托某软件公司开发 DOS 下的软件,但某软件公司理解成 Windows 命令行下执行的软件了,做了半天总算做出来了,但对不起,我不付钱,因为我已经说明了是 DOS 下的软件。
概念不清,审题不清,做再多的事也是无用功。
作者: Climbing     时间: 2008-11-30 13:57
DOS是一个单用户单任务的操作系统,基本上不存在并行运行这种事儿,象楼主这种要求,似乎只有两个途径:

1、专门运行一个程序来判断当前时间,符合要求就去执行相应的操作,例如关机。

2、编写专门的内存驻留程序,截取时钟中断处理程序,然后再进行时间判断,根本判断结果执行类似的操作。
作者: goli2008     时间: 2008-11-30 22:00
这个有什么难??

1、DOS下有个time命令,可取当前时间
2、写个BAT处理,定时如(10秒)判断一回时间,时间就关机,不就完了?
3、dos下的时钟、关机程序也很多,搜搜吧
作者: lianjiang2004     时间: 2008-12-4 09:55


  Quote:
Originally posted by DOSforever at 2008-11-29 16:41:
假如某企业委托某软件公司开发 DOS 下的软件,但某软件公司理解成 Windows 命令行下执行的软件了,做了半天总算做出来了,但对不起,我不付钱,因为我已经说明了是 DOS 下的软件。
概念不清,审题不清,做再多的事也是无用功。  

如此说来,中国dos联盟的论坛里,里面绝大多数话题都是名不副实的。因此,加上必要的强调,很有必要,呵呵。

再说了,签了合同,就要做打官司的准备。发帖子有几个是按合同要求的?呵呵。
作者: DOSforever     时间: 2008-12-4 12:39
合同只是比喻,越是强调就越是心虚,别人名不副实是别人的事,我们不能跟着不正常的人跑,什么是正确和错误自己要有主心骨。所以没有必要强调,他们不能正确理解那是他们的事情。
作者: winson4829     时间: 2008-12-6 00:48
寫一個 TSR 程式, 常駐你的工作程式, TSR 的程式其實是很簡單的, 以 TCC 或 BC 程式碼如下:
此 TSR 省略了很多安全呼叫的程序碼(例如DTA and PSP的保留及回復,及inDosFlag 和 CriticalFlag 的判斷, 及中斷程序的不可重覆進入限定) , 不過在此應該不會有影响
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dos.h>
#include <io.h>
#include <bios.h>
#include <fcntl.h>

static void interrupt (*OldInt8)(void);
static void interrupt NewInt8(WORD bp,WORD di,WORD si,WORD ds,WORD es,WORD dx,WORD cx,WORD bx,WORD ax);

static void interrupt NewInt8(WORD bp,WORD di,WORD si,WORD ds,WORD es,WORD dx,WORD cx,WORD bx,WORD ax)
{
    if(OldInt8!=NULL) OldInt8();
   
    // 你的判斷程序寫在這裡 ....
    // 1. 取得時間
    // 2. 時間到了嗎
    // 3. 執行關機
}

int main(int argc, char *argv[])
{
    struct SREGS    sregs;
    union  REGS     regs;
    unsigned short  u16;

    // 本程式所需空間
    u16 = *(unsigned far*)MK_FP(_psp-1, 3) + 16;

    // 計時器中斷每秒會被呼叫 18.2 次
    OldInt8 =getvect(0x08);     // Store 0x08 VECTOR
    setvect(0x08,NewInt8);      // install new ISR
   
    keep(0, u16);               // 常駐在記憶體
    return(1);
}