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