Il est possible d'obtenir une précision de quelques millisecondes, en fonction de la vitesse de votre machine.
Je viens de terminer la création d'un tel lot, et bien que je ne vais pas partager avec vous le code actuel, je vais vous donner quelques indications:
Utilisation% du temps variable%, et en Devide sous-chaînes (sans ":" et ".") - une sous-chaîne recevra les secondes, l'autre - minutes (vous pouvez ajouter des heures, pour des retards de plus d'une heure et même incorporer la date)
Utiliser set/A pour transformer les variables de temps en 1 entier représentant la quantité de secondes écoulées depuis une heure arrondie (X: 00: 00.00). Ajoutez le délai entré (en secondes) à cela. Créer une boucle courte, en comparant la valeur de la var combinée (expliquée dans la section 2) à l'heure actuelle (besoin de recalculer la valeur min + sec combinée curent, à l'intérieur de cette boucle), et quitter la boucle lorsque le le match est vrai.
Un grand bugfix ici - vous aurez besoin de tronquer des zéros à des variables qui précédentes sont sur le point d'obtenir une évaluation dans une commande « set/A ».J'ai remarqué que l'évaluateur de la console (pour cette commande) renvoie une erreur lorsqu'un entier avec un précédent 08 ou 09 (ou simplement 08 ou 09) est utilisé.
Remarque: Cela fonctionnera uniquement avec les extensions de commande activées. Pour le tester, utilisez ce qui suit au début de la routine:
verify other 2>nul
setlocal enableextensions
if errorlevel 1 goto err
Et puis ajoutez un sous-programme de gestionnaire d'erreur nommé « err ».
Si vous souhaitez continuer votre lot dans le même fichier, utilisez "endlocal" après le sous-programme de bouclage.
BTW, cela s'applique SEULEMENT à service pack Windows XP 2 ou 3.
Puisque vous mentionnez XP et NT, je suppose que vous faites référence à la console et pas réellement en cours d'exécution MS-DOS :) Êtes-vous autorisé à ajouter un utilitaire pour faire le sommeil? Vous avez dit que l'option ping n'était pas précise, de quelle précision avez-vous besoin? –