2009-04-21 14 views
3

Je suis passé quelques façons de provoquer une temporisation comme les pings et dirs. Bien qu'aucun d'entre eux ne soit vraiment précis, y a-t-il une bonne façon de provoquer un retard?(MS-DOS) Délais

J'ai entendu parler quelques petites choses si elles ne fonctionnent pas sur tous les ordinateurs, pas sur mon Windows XP ni Windows NT à l'université.

Il prend les âges en passant par tous les fichiers sur Google trouver une bonne réponse, et que je ne trouve pas encore la question sur Stack Overflow je pensais que ce serait peut-être bon de créer simplement la question moi-même;)

+0

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? –

Répondre

6

Sleep

Il vous permettra de le faire.

+0

Je vois, mal essayer c'est dur pas vraiment idéal puisque le .bat est fait pour être compatible avec anny pc, donc je devrais télécharger ce fichier tous les temps ... mais je regarde mal ce que je peux faire avec ça, ty pour votre réaction :) – billyy

+0

Je vois, j'ai été capable de trouver un excellent moyen d'utiliser cela. Donc, c'est probablement le meilleur moyen de le faire. Légèrement ajusté mais oui, ça le fait. – billyy

0

"... manière appropriée ...."

vous ne pouvez pas faire cela sous DOS.

+0

les gens disent que beaucoup, difficile vous devez être capable de le créer, même si vous venez de créer une commande qui si je veux entrer 5 secondes juste répéter une commande 5 fois qui le maintient occupé pendant 1 seconde ... – billyy

+0

Je pense il voulait dire: Vous ne pouvez pas faire cela sous DOS sans piratage important. –

5

<warning>This is a hack</warning>

Utilisez votre langage de programmation favori (autres que lot MS-DOS) et de créer une application qui prend un argument, le nombre de millisecondes d'attente, puis, il suffit d'appeler ce programme à partir d'un fichier batch pour dormir le montant requis.

Pour autant que je sache, c'est le seul moyen fiable de le faire dans le DOS.

+0

Ce n'est pas ce que j'ai utilisé mais c'est une excellente façon de le résoudre, mais je ne connaissais pas vraiment un langage qui serait d'usage dans ce cas. – billyy

2

Si vous ne pouvez pas envoyer un autre programme avec le fichier de commandes, utilisez DEBUG pour écrire une commande de mise en veille à la volée et l'exécuter.

EDIT: La réponse ci-dessus était une sorte de toungue en joue. Je n'exécuterais pas un fichier batch qui contenait des trucs DEBUG. Je crois que la façon traditionnelle d'utiliser un retard dans un fichier batch est la commade CHOICE.

type nul|choice /c:y /t:y,nn > nul 

Qui, bien sûr, ne fonctionne pas sous XP, car ce serait WAAYY trop pratique.

+0

bien que je pourrais bien sûr le laisser écrire un script php que de l'exécuter, php script cache, attend, et supprime la fenêtre après que le lot va continuer ... – billyy

+0

@billyy: Pourriez-vous juste écrire un script php comme ça alors? ' ' – Piskvor

0

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:

  1. 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)

  2. 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.