Question pour les pros du fichier *.bat (programmation) - Programmation
Marsh Posté le 30-07-2001 à 21:18:49
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... 
Marsh Posté le 30-07-2001 à 21:21:41
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 
Marsh Posté le 30-07-2001 à 21:29:21
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 
Marsh Posté le 31-07-2001 à 00:10:52
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. 
Marsh Posté le 31-07-2001 à 16:23:20
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. 
Marsh Posté le 31-07-2001 à 16:52:12
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]
Marsh Posté le 01-08-2001 à 23:18:44
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++ 
Marsh Posté le 01-08-2001 à 23:55:01
heu...   t'as essayé d'inverser la logique des test pour éviter la réponse négative...
 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  
 
si y'a pas machin sur X, goto y'a rien 
x:\ghost\ghost.exe 
 
label :y'a rien: 
Marsh Posté le 02-08-2001 à 00:50:05
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 
Marsh Posté le 02-08-2001 à 06:48:22
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:. 
Marsh Posté le 03-08-2001 à 14:41:24
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]
Marsh Posté le 03-08-2001 à 18:30:14
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++ 
Marsh Posté le 04-08-2001 à 02:47:50
> 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+ 
Marsh Posté le 04-08-2001 à 08:49:16
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... 
Marsh Posté le 04-08-2001 à 14:41:17
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++ 
Marsh Posté le 04-08-2001 à 21:26:12
> 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+ 
Marsh Posté le 05-08-2001 à 01:10:36
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++ 
Marsh Posté le 05-08-2001 à 01:53:48
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]
Marsh Posté le 05-08-2001 à 18:23:04
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++ 
Marsh Posté le 06-08-2001 à 05:26:27
Je t'ai envoyé un nouveau mail. 
 
Tiens moi au courant si cette fois tout fonctionne correctement. 
 
A+ 
Marsh Posté le 06-08-2001 à 21:06:49
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+ 
Marsh Posté le 30-07-2001 à 18:02:40
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.