|
Dernière réponse | |
---|---|
Sujet : Question pour les pros du fichier *.bat (programmation) | |
tfj57 | Enfin ça fonctionne !
Bonne utilisation. Salut |
Aperçu |
---|
Vue Rapide de la discussion |
---|
tfj57 | Enfin ça fonctionne !
Bonne utilisation. Salut |
cjc | tfj57, Bravoooooooooo !
Tout fonctionne super bien , qu'il y ai ou pas de CD sur les lecteurs. Je tiens à te remercier pour ta patience et ton effort. Super sympa. A+ |
tfj57 | Je t'ai envoyé un nouveau mail.
Tiens moi au courant si cette fois tout fonctionne correctement. A+ |
TheJackal | bat ? :ouch: existe encore... |
cjc | Salut tfj57,
Bien,j'ai essayé mais cela ne marche pas. Mes remarques : CD dans le lecteur Y: le programme se dirige sur l'étiquette SUITE, puis ERREUR Donc ne trouve pas le CD placé dans sur Y: CD dans le lecteur X: le programme se dirige sur l'étiquette SUITE, puis ERREUR Dans les deux cas les lignes : IF EXIST X:\ghost2k1\ghostpe.exe GOTO LABELX et IF EXIST Y:\ghost2K1\Ghostpe.exe GOTO LABELY ne sont pas exécutées et aucun message venant du programme CHECKDRV.EXE ne s'affiche. Une idée ? :GHOSTNO checkdrv X: if errorlevel 1 goto suite IF EXIST X:\ghost2k1\ghostpe.exe GOTO LABELX :suite checkdrv Y: if errorlevel 1 goto erreur IF EXIST Y:\ghost2K1\Ghostpe.exe GOTO LABELY :erreur echo Pas de CD dans les lecteurs GOTO END A++ |
tfj57 | J'ai bien reçu ton message, et apparemment tu n'a pas compris comment utiliser la commande.
Le fichier CHECKDRV.C est le source que tu n'as pas besoin, je l'ai juste envoyé à titre indicatif. Le fichier TEST.BAT est un exemple qu'il fallait regarder pour voir comment j'appelle la commande. Donc sur ta disquette tu n'as besoin QUE de l'exécutable checkdrv.exe. Ci-dessous tu trouveras ton autoexec.bat modifié. Le commande s'utilise comme suit : checkdrv lettre_à_tester S'il n'y a pas de média, après l'appel de cette commande, il faudra traiter l'errorlevel 1. Exemple pour savoir s'il y a un cd-rom dans x:\ checkdrv x: if errorlevel 1 goto erreur instructions si pas d'erreur :erreur instructions dans le cas où il n'y a pas de cd dans le lecteur ou volume x invalide. Voila, ceci est en réponse à ton message. A+ -------------- ##### DEBUT AUTOEXEC.BAT @echo off echo Verification, presence du media checkdrv x: if errorlevel 1 goto suite IF EXIST X:\ghost2k1\ghostpe.exe GOTO LABELX :suite checkdrv y: if errorlevel 1 goto erreur IF EXIST Y:\ghost2K1\Ghostpe.exe GOTO LABELY :erreur ECHO Aucun CD sur les lecteurs GOTO END :LABELX path X:\ghost2001 ghostpe.exe -rb GOTO END :LABELY path Y:\ghost2001 ghostpe.exe -rb GOTO END :END ##### FIN AUTOEXEC.BAT [edtdd]--Message édité par tfj57--[/edtdd] |
cjc | Salut, tfj57
Vois ton courrier, Je n'ai aucune réponse à l'appel du programme. ¨Pourrais-tu m'expliquer l'emplacement exacte et la syntaxe d'appel. A++ |
tfj57 | > tfj57, Merci pour les détails > Oui, je veux bien
> pour l'envoi de l'exécutable mail le moi > à exomil@meloo.com. Ok c'est fait, fais moi savoir si tout fonctionne bien. A+ |
cjc | tfj57, Merci pour les détails > Oui, je veux bien pour l'envoi de l'exécutable mail le moi à exomil@meloo.com .
Pascal > je vais essayer de comprendre le fonctionnement du Bat de la disquette, mais si tu as la réponse fais en moi part. Merci a vous A++ |
pascal | une autre idée, regarde le fonctionnement de la disquette de secours de win98.
Y a un utilitaire et un batch pour trouver le lecteur cd et le ram-disque. tu peux même réutiliser le batch sans quasiment le modifier... |
tfj57 | > Je vais chercher de quoi créer ce programme. Si tu as des problèmes, je peux t'envoyer l'exécutable. > Au fait, il faudra faire appel au programme > dans mon fichier Autoexec.bat pour tester > la présence d'un eventuel cd. C'est ça ? Oui. Il suffit de mettre dans l'autoexec.bat les commandes checkvol z: if not errorlevel 1 goto suite traitemnent si erreur :suite traitement sans erreur > Je me demande s'il pourra récupérer la valeur > du paramètre représentant le lecteur > dans MSCDEX ( /L:X ) pour le test ? C'est possible, mais ce n'est pas nécessaire car dans ton autoexec.bat tu forces (c'est mieux) la lettre de Cd avec /L:x, donc il suffit d'appeler checkvol z: > C'est très compliqué tout ça. En Dos ça toujours été compliqué :( A+ |
cjc | Merci pour ton aide,
Je vais chercher de quoi créer ce programme. Au fait, il faudra faire appel au programme dans mon fichier Autoexec.bat pour tester la présence d'un eventuel cd. C'est ça ? Je me demande s'il pourra récupérer la valeur du paramètre représentant le lecteur dans MSCDEX ( /L:X ) pour le test ? C'est très compliqué tout ça. A++ |
tfj57 | D'après mes lointains souvenir, le problème que tu évoques n'est pas évident.
En effet, lorsque l'on veut accéder au lecteur de disquette ou au lecteur de Cd sans y introduire de média, on a une erreur fatale avec le fameux message. Malheureusement cela se passe ainsi pour toutes les fonctions Dos. Certains disent qu'il n'y a pas de problèmes, mais j'en doute, il suffit de faire l'essai avec A: sans la disquette .... En explorant les interruptions, j'en ai trouvé une qui ne fait pas l'erreur fatale. Voici un programme CHECKVOL.C, qu'il faut compiler (je l'ai fait en Turbo C, mais il devrait pouvoir être compilé avec n'importe quoi d'autre), qui teste si une lettre de volume est accessible. Il suffit de mettre comme argument la lettre a tester, si tout est ok errorlevel sera 0, sinon il sera à 1. Le batch TEST.BAT sert à illustrer tout cela. J'ai tout testé à travers une fenêtre Dos sous Win98 et en Dos en quittant Windows, tout semble très bien fonctionner. Je vais en profiter pour l'utiliser moi aussi pour mes cd de restaurations !!! A+ ------------------------------ ###### CHECKVOL.C ###### #include <dos.h> #include <ctype.h> #include <stdlib.h> main() { union REGS RegIn,RegOut; struct SREGS RegSeg; char Buf[1024]; int Lecteur; /* Conversion lettre lecteur en chiffre de 1 a 26 */ Lecteur=toupper(*_argv[1])-64; if (Lecteur<1 || Lecteur>26) /* Lecteur invalide */ exit(1); /* Appel interruption Dos Get/Set disk serial number */ /* qui ne fait pas d'erreur fatale si le média n'est pas */ /* dans le lecteur, je crois que c'est presque la seule !!! */ segread(&RegSeg); RegIn.ah=0x69; RegIn.al=0; RegIn.bl=Lecteur; RegIn.bh=0; RegIn.dx=FP_OFF(Buf); RegSeg.ds=FP_SEG(Buf); int86x(0x21,&RegIn,&RegOut,&RegSeg); if (RegOut.x.cflag) /* Si fonction a echou‚e, lecteur non valide ou médi non présent */ exit(1); else /* Sinon tout est ok */ exit(0); } ###### Fin de CHECKVOL.C ###### ------------------------------ ###### TEST.BAT ###### @echo off checkvol %1 if not errorlevel 1 goto suite echo Lecteur non valide ou media non present goto fin :suite echo Tout est Ok :fin ###### Fin de TEST.BAT ###### [edtdd]--Message édité par tfj57--[/edtdd] |
avv | Je pense que le batch fonctionne bien !!!!
Vérifie que l'application n'est pas configurée pour fonctionné avec le CD SUR LE CD X: !!! ce qui expliquerai : bien que lancé sur le lecteur Y:, la config du prog exige la présence du CD dans X:. |
cjc | J'ai testé mais dans cet ordre le message est toujours renvoyé si le CD n'est pas ds le lecteur X:.
:GHOSTNO IF not EXIST Y:\ghost2001\Ghostpe.exe GOTO LABELX path Y:\ghost2001 ghostpe.exe -rb GOTO END :LABELX If not exist X:\ghost2001\Ghostpe.exe GOTO END path X:\ghost2001 ghostpe.exe -rb GOTO END :end |
csuper | heu... :sarcastic: t'as essayé d'inverser la logique des test pour éviter la réponse négative...
en gros, tu cherche si y'a ghostxx.exe sur X ou Y, donc tu teste l'inverse...ça donnerait : si y'a pas machin sur Y, goto truc y:\ghost\ghost.exe label :truc: si y'a pas machin sur X, goto y'a rien x:\ghost\ghost.exe label :y'a rien: |
cjc | Mon poste a été supprimé du forum, HARWARE et j'ignorais sa présence ICI.
Donc pour AVV,oui ça fonctionne, mais voit ma question en détail La question et en retrait. IF EXIST X:\ghost2k1\ghostpe.exe GOTO LABELX - Ma question : - Comment passer au test suivant AUTOMATIQUEMENT en évitant le message de la ligne qui suit. - "Lecteur pas prêt, Annuler, Réessayer, Echec" - Ce message est renvoyer si n'y a pas de CD dans le lecteur X:\ , et je ne veux pas appuyer sur une touche pour continuer. - Il y aurait bien ERRORLEVEL,j'ai essayé sans succès, comment bien le programmer ? IF EXIST Y:\ghost2K1\Ghostpe.exe GOTO LABELY GOTO END :LabelX path X:\ghost2k1 ghostpe.exe -rb GOTO END :LabelY path Y:\ghost2k1 ghostpe.exe -rb GOTO END :END A++ |
avv | Je viens de faire le test sur ma bécane et cela fonctionne, j'ai simplement modifier la lettre (X -> E) et pas de problème.
---------------------------------------------- C:\>IF EXIST e:\ghost2k1\ghostpe.exe GOTO LABELX C:\>IF EXIST Y:\ghost2K1\Ghostpe.exe GOTO LABELY C:\>ECHO Message d'erreur Message d'erreur C:\>GOTO END ------------------------------- un dir m'affiche un msg : C:\>dir e: The device is not ready. Je ne comprends pas très bien pourquoi cela ne fonctionne pas chez toi ? [edtdd]--Message édité par avv--[/edtdd] |
avv | Tu travailles sous quel OS ? |
cjc | Dans le test, le programme est recherché sur le lecteur X:\, ne trouve rien et se met en attente avec le message "Lecteur pas prêt, Annuler, Réessayer, Echec" . Comment programmer le passage sur le lecteur Y sans s'arrêter à cette ligne . J'ai bien essayé la commande "errorlevel" mais rien, et je pige rien. La reponse de AVV fonctionne mais la présence du cd dans le lecteur X:, sinon se foutu message revient. |
cjc | Je vous remercie à tous pour votre aide , il est un peu tard mais demain je m'y attache et vous dennerai des nouvelles .
A demain. |
avv | Le plus simple est de faire un test
IF EXIST X:\ghost2k1\ghostpe.exe GOTO LABELX IF EXIST Y:\ghost2K1\Ghostpe.exe GOTO LABELY ECHO Message d'erreur GOTO END :LabelX path X:\ghost2k1 ghostpe.exe -rb GOTO END :LabelY path Y:\ghost2k1 ghostpe.exe -rb GOTO END :END |
Jubijub | http://2dos.homepage.dk/batutil/help/IF_E.HTM#el
fait toi plaisir, c une bible du Batch sous dos... en gros : lancement de ton jeux sur lecteur X -->activation du test errorlevel -->si errorlevel = x then launch game sur x else launch game sur Y |
Jubijub | il doit falloir jouer avec les errorlevel...si t'a un errorlevel = à tant, c que le cd y est pas, sinon, c qu'il y est...
je me souviens plus la syntaxe des errorlevel, mais le principe, en gros, c que tu lui demande de mettre un flag si il trouve une erreur...et après, t'a qu'a tester la position du flag... |
cjc | SVP aidez-moi !!! |
cjc | Salut,
Comme j'ai précisé cette question concerne les pros de la programmation de fichiers avec l'extention *.Bat mais tout un chacun peu y apporter son idée. D'après le schéma suivant comment faire pour passer du lecteur X: au lecteur Y: si aucun cd-rom n'est présent dans le lecteur X: ? :GHOSTNO echo Entrée du repertoire ghost2001, rem Test de la presence du CD dans le lecteur X:\ rem S'il n'y est pas, passer au lecteur Y:\ automatiquement sans attendre l'action de l'utilisateur Remarque : Dans le test, le programme est recherché sur le lecteur X:\, ne trouve rien et se met en attente avec le message "Lecteur pas prêt, Annuler, Réessayer, Echec" . c'est cette attente que je veux annuler, et passer sur le lecteur suivant. En fait c'est comme si au démarrage le Pc test le lecteur A:\ et passe au C:\ s'il n'y pas de disquette dans lecteur. path X:Cd \ghost2k1 ghostpe.exe -rb echo OFF echo Recherche dans path /L:Y echo. path Y:\ghost2k1 ghostpe.exe -rb goto end J'ai peut-être trop parlé pour une réponse sans doute très facile, mais je n'y connais pas grand chose et vous remercie par avance pour votre aide. |