2017-06-11 1 views
0

Est-ce que j'ai manqué une modification de la commande "timeout" interne de Windows?Pourquoi la commande "Timeout" d'un fichier batch ne fonctionne-t-elle soudainement plus?

J'ai un fichier batch depuis longtemps maintenant qui me montre le numéro de version d'un programme. J'ai ajouté la commande timeout pour garder la fenêtre CMD ouverte pendant quelques secondes. Donc, mon fichier de commandes ressemble maintenant à ceci:

context -version 
timeout 7 

Cela a bien fonctionné, mais depuis une mise à jour de Windows (évidemment), les fenêtres CMD ferme directement comme si la commande de délai d'attente ne fonctionne plus. Quand je commence le fichier à partir d'une fenêtre CMD je reçois un message:

D: \ CTX>délai d'attente 7
Try 'délai --help' pour plus d'informations.

Le fichier est tel qu'il était depuis que je l'ai créé, mais le comportement est nouveau pour moi.

Donc, quelqu'un peut-il me dire ce que je vais mal ici?

+1

Timeout fonctionne toujours bien dans un fichier de commandes sur ma version mise à jour de Windows 10. Peut-être essayer ajouter le paramètre -NOBREAK (Juste prendre une chance), ou "timeout/T 7" –

+0

Changez-le pour lire 'timeout.exe 7' ou '"% __ APPDIR __% timeout.exe "7' Si cela fonctionne bien, comme je le suppose, vous trouverez probablement que votre script ou un autre fichier local exécutable nommé' timeout' avec une extension différente cause votre problème . _ (Exécuter la commande donnée par Magoo devrait également identifier ce scénario) _. – Compo

Répondre

2

Je crois que vous avez probablement acquis une version différente de timeout puisque l'aide --help est un spécificateur d'option de style \*nixy.

Essayez, à partir de l'invite

where /T timeout.* 

qui devrait énumérer les timeout versions du path et peut aider à localiser la version rogue.

+0

Merci, vous avez raison. Après avoir utilisé la commande * where *, j'ai remarqué que cygwin64, que j'avais installé il y a quelques semaines, était dans le chemin avant system32. J'ai juste dû changer la commande et maintenant ça marche encore ... – Koenich

2

TIMEOUT n'est pas une commande interne (interpréteur de commandes de Windows) cmd.exe comme POUR ou DIR.

Il s'agit d'une commande externe qui signifie qu'une application de console se trouve dans le répertoire Windows %SystemRoot%\System32.

En utilisant seulement timeout sans extension de fichier et sans chemin complet, interpréteur de commandes de Windows recherche d'abord dans le répertoire courant avec timeout.* pour un fichier ayant une extension de fichier répertorié dans la variable d'environnement PATHEXT.

Si un tel fichier se trouve dans le répertoire courant, interpréteur de commandes de Windows continue la recherche de timeout.* avec une extension de fichier répertorié dans PATHEXT dans les répertoires définis dans la variable d'environnement PATH .

Sur les versions de Windows Vista et versions ultérieures de Windows PATH du système est défini par:

%SystemRoot%\system32;%SystemRoot%\system32;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\; 

Pour cette raison, il se trouve généralement d'abord %SystemRoot%\System32\timeout.exe sur l'utilisation juste timeout dans un fichier batch.

Mais si le répertoire courant contient un fichier avec un nom timeout.* ayant une extension de fichier également répertorié dans la variable d'environnement PATHEXT ou PATH a été redéfini localement ou l'ensemble du système par un installateur qui a mis d'autres chemins d'accès au début au lieu de les ajouter à la fin et l'un de ces répertoires contient également un fichier timeout.*, l'interpréteur de commandes Windows exécute cet exécutable ou ce script.

Les suggestions pour résoudre ce problème:

  1. Utilisation dans le fichier batch %SystemRoot%\System32\timeout.exe car alors interpréteur de commandes de Windows ne doit pas rechercher cet exécutable et il ne peut pas arriver que le mauvais timeout est exécuté à tort, à l'exception la variable d'environnement SystemRoot est modifiée localement ce qui est très peu probable par rapport aux manipulations PATH.

  2. Ouvrez Windows Panneau de configuration - Système - Paramètres système avancés (lien sur le côté gauche), sélectionnez l'onglet avancée, cliquez sur le bouton Variables d'environnement ..., recherche dans la moitié inférieure dans la liste des Variables système pour Chemin, sélectionnez cette variable d'environnement, cliquez sur Modifiez et déplacez tous les chemins de répertoire à gauche ou au-dessus (dépend de la version Windows) de %SystemRoot%\system32 jusqu'à la fin de la liste des répertoires.

  3. S'il vous plaît signaler à l'auteur de l'application ou du faisceau logiciel modifié système PATH et inséré leurs chemins d'accès au début au lieu de les annexant à la fin de cette mauvaise modification du système de Windows PATH.

Comme Magoo a écrit déjà: un portage timeout.* d'Unix vers Windows est évidemment exécuté sur votre machine Windows à cause de la déclaration d'aide de sortie. Pour obtenir de l'aide sur une commande sous Windows, la commande doit généralement être exécutée avec le paramètre /? et non avec -h ou --help comme sur Unix.

+0

une réponse très détaillée et informative. Merci beaucoup. – Koenich