Für die Gestaltung einer Batch-Kommando-Folge, war es notwendig, ein wenig auf die Ausführung eines vorhergehenden Kommandos zu warten. Ich habe lange gesucht, aber nichts gefunden. Das passendste war das Kommando timeout. Das meckerte jedoch die Eingabeumleitung an: "FEHLER: Die Eingabeumleitung wird nicht unterstützt. Prozess wird unverzüglich beendet." Also, schnell selber machen!

Hier das minimalistische VB-Programm:

Module Sleep

   Sub Main()
      If My.Application.CommandLineArgs.Count > 0 Then
         Try
            Dim time = CInt(My.Application.CommandLineArgs(0))
            Threading.Thread.Sleep(time * 1000)
         Catch
            Console.WriteLine("Parameter is not numeric")
            Console.WriteLine("")
            Console.WriteLine("Usage: Sleep <number of seconds>")
         End Try

      End If
   End Sub

End Module

Zu beachten ist, dass die Ladezeit von .NET-Programmen nicht vernachlässigbar ist. Am besten zieht man 1 Sekunde vom Zielwert ab.

Download Binary

Das ganze noch einmal als C-Programm. Dieses ist zwar auch nicht kleiner als das VB-Programm, benötigt aber kein .NET-Runtime.

#include <windows.h>
#include <stdio.h>

#define EXIT_FAILURE 1

int DoSleep(int argc, char *argv[]);

int main(int argc, char *argv[])
{ if (DoSleep(argc, argv))
  { printf("Invalid paramters\n"); 
    printf("Usage: Sleep <number of seconds>\n\n");
    return (EXIT_FAILURE);
  }

  return 0;
}



int DoSleep(int argc, char *argv[])
{ char *endptr;
  unsigned long int Seconds;

  if (argc != 2)
    return 1;

  errno = 0;
  Seconds = strtoul(argv[1], &endptr, 10);
  if (errno)
    return 1;

  if (endptr == argv[1])
    return 1;

  Sleep(Seconds * 1000);

  return 0;
}

Übersetzt mit GCC:

gcc -Wall Sleep.c -o Sleep.exe

Download