Windows XP のコマンドプロンプトに sleep がないので、"sleep.exe" というものが世にあるのをしりつつ自分で書いてみた。
単位は秒。世にあるものよりも機能が少ない!
すいません、最初はググりました。でも、出てくるのが VBS で "Wscript.Sleep(Wscript.Arguments(0))" みたいな荒っぽいものばかりだったので、エラーチェックをそれなりに入れました。
今回 sleep が欲しいと思ったのは、Windows 起動時に、複数のサーバー等チェックのための BAT ファイルを動かしているため。起動時(厳密にはログオン時か)には重い処理がたくさん動くので、それらが完了してから動かしたかったのです。いや、時間差で起動すればいいんですけれどね、作りたかったのですよ。
さらに、その目的だと最初に VBS のインタプリタが動くのは目的に合っていなくない? という理由でC言語で書き直してみたり。ソースファイルの管理が面倒になる泥沼の道に踏み込みました。
まあ、そんな感じで。以下ソースプログラム。
' vbssleep.vbs ' ' 2010/05/15 make ' Option Explicit If Wscript.Arguments.length <> 1 Then Wscript.Echo("Usage: cscript //NoLogo vbssleep.vbs [Second] ") Else Dim n n = Wscript.Arguments(0) If IsNumeric(n) Then Wscript.Sleep( n * 1000 ) Else Wscript.Echo("Usage: cscript //NoLogo vbssleep.vbs [Second] ") End If End If
/* sleepsec.c 2010/05/15 make */ #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <limits.h> void printUsage(void); long main(int argc, char* argv[]) { long wait; if ( argc != 2 ) { printUsage(); return -1; } wait = strtol(argv[1], NULL, 10); if ( wait == 0 ) { printUsage(); return -2; } else if (wait == LONG_MAX) { fprintf(stderr, "Too Long Time.\n"); printUsage(); return -3; } else if (wait < 1 || wait == LONG_MIN) { fprintf(stderr, "Too Minimal Time.\n"); printUsage(); return -4; } wait = atol(argv[1]) * 1000; Sleep( wait ); return wait; } void printUsage(void) { fprintf(stderr, "Usage: sleepsec [Second]\n"); }
- 追記
- コンパイル済み実行ファイルを置きました。続・コマンドプロンプトに sleep がないので