[BATCH] Problèmes IF

Problèmes IF [BATCH] - Shell/Batch - Programmation

Marsh Posté le 24-05-2016 à 12:06:07    

Salut :hello:  
 
Je viens vous voir car cela fait plusieurs heures dispaché sur plusieurs jours que je Boss sur un petit scrypt sans succès...
 
Voila ce que je cherche à faire :
 
- Lancer l'installer d'un .exe
- Verifier (j'utilise if exist) si le exe s'est déjà installé.
- Verifier si on est en 32 ou 64 bit affin de ne pas regarder dans le dossier c:/program files (x86) Avec un 32 bit  :D Sinon il trouvera jamais si mon exe est déjà installé ou pas avec un 32 bit.
 
Puis c'est déjà bien hein :D
 
Bref c'est pas grand chose... Mais j'ai jamais fait de Batch donc bon  :lol:  
 
Voici ce que j'ai pour l'instant :
 

Code :
  1. @echo off
  2. if exist "C:\Program Files (x86)"
  3. ( if not exist "C:\Program Files (x86)\file"
  4.  ( Start install.exe /pleinsdarguments)
  5. )
  6. if exist "C:\Program Files"
  7. ( if not exist "C:\Program Files\file"
  8.  ( Start install.exe /pleinsdarguments )
  9. )


 
En gros en algo voila ce que je voulais faire (surement mal):
 
Si c:\program Files (x86)" et que "C:\Program Files (x86)" n'éxiste pas alors lancé l'install install.exe
Et la même Chose en 32 bit.
 
Voila voila !  
Bien evidemment j'ai fait des recherche Google, et rien qui me convient ou m'apporte des Solutions.
 
Pour info le test seul de l'install marche (parce qu'au début j'avais oublié que j'avais des machine 32 bit).
 
Merci d'avance


Message édité par skikito le 24-05-2016 à 12:13:08
Reply

Marsh Posté le 24-05-2016 à 12:06:07   

Reply

Marsh Posté le 24-05-2016 à 13:01:31    

Qu'est ce qui ne fonctionne pas exactement ?
 
Sinon, pour tester l'existence d'un dossier, de mémoire, il faut ajouter \*.* à la fin :
 

Code :
  1. if exist "C:\Program Files (x86)\*.*"

Reply

Marsh Posté le 24-05-2016 à 13:13:17    

Salut Chelmi!
 
Tout d'abord, merci de ta réponse.
 
Alors en faite, ce qui se passe c'est que la version que je vous ai donné (y'en a pleins d'autres, des tests), c'est comme si les conditions ne se remplissait jamais. Du coup mon exe ne se lance jamais, même quand j'aimerais bien.
 
Et non pas besoin de \*.* car comme je l'ai dit, j'avais reussis à faire marché le test  de présence (sans ça du coup).
C'est plutot les if en cascade qui merde en faite.
 
J'ai quand même essayé ta solution, ça n'a pas fonctionné.
 
Encore merci  ! :bounce:  
 

Reply

Marsh Posté le 24-05-2016 à 13:54:22    

Citation :

Et non pas besoin de \*.* car comme je l'ai dit, j'avais reussis à faire marché le test  de présence (sans ça du coup).


Sans le \*.* le exist va aussi être vrai pour un FICHIER avec le nom indiqué.

 

Pour le problème en soit cela semble être dû au placement des parenthèses, en tout cas ceci fonctionne:

Code :
  1. IF EXIST "C:\test\*.*" (
  2.     echo test existe
  3.     IF NOT EXIST "C:\test\file" (
  4.         echo file n'existe pas
  5.     )
  6. )
 

Par contre EXIST est vrai aussi pour un dossier, à voir si c'est un problème.

 

edit: Voilà un truc qui réagit uniquement au FICHIER file:

Code :
  1. dir "C:\test\file" /a-d >NUL 2>&1
  2. IF %ERRORLEVEL% EQU 1 (
  3.     echo le FICHIER file n'existe pas
  4. )


Message édité par rat de combat le 24-05-2016 à 14:03:02
Reply

Marsh Posté le 24-05-2016 à 14:24:05    

Salut !
 
Voila mon code pour exemple:  
 

Code :
  1. @echo off
  2. IF EXIST "C:\Program Files (x86)\*.*" (
  3. IF NOT EXIST "C:\Program Files (x86)\OCS Inventory Agent\*.*" (
  4.  Start OCS-NG-Windows-Agent-Setup.exe /S /NOSPLASH /INSTALL /SERVER=http://192.168.225.104/ocsinventory /NP /NOW
  5.         )
  6. )
  7. IF EXIST "C:\Program Files\*.*" (
  8. IF NOT EXIST "C:\Program Files\OCS Inventory Agent\*.*" (
  9. Start OCS-NG-Windows-Agent-Setup.exe /S /NOSPLASH /INSTALL /SERVER=http://192.168.225.104/ocsinventory /NP /NOW
  10.         )
  11. )


 
Du coup maintenant ca install mon exe tout le temps^^
 
Mon Probleme c'est pas la condition pour le fichier qui OCS inventory Agent. Ca j'y suis arrivé en faite ^^ Mais quand je me suis souvenue que j'avais des machine 32 et 64 bit, je me suis dit que le chemin pour verifier ne sera pas toujours le même, donc fallait faire des if en cascade.  
 
Merci


Message édité par skikito le 24-05-2016 à 14:26:42
Reply

Marsh Posté le 24-05-2016 à 14:27:16    

Pas compris :pt1cable:  
 
>IF NOT EXIST "C:\Program Files\OCS Inventory Agent\*.*" (
Tu veux vérifier l'existence d'un dossier ou d'un fichier là?
 
EXIST abc -> sera vrai pour dossier ou fichier
EXIST abc\*.* -> sera vrai pour dossier uniquement
 
Deux conseils: Vire le @echo off pour tester et rajoute des echo de debuggage.

Reply

Marsh Posté le 24-05-2016 à 14:35:14    

C'est possible que je dise des connerie, j'ai des base en progra mais pas en Batch  :D  
 
Mais en faite moi je test que des dossier la, donc pas la peine de se prendre la tête Avec des fichier ^^
 
En gros l'idée c'est:  
Je test si le dossier "Program Files (x86)" est présent pour savoir si je suis bien en 64 bit.
Si je suis bien en 64 bit, je test le dossier "C:\Program Files (x86)\OCS Inventory Agent\", si celui ci est présent, cela signifie que je n'ai pas à faire d'installation.  :)  
Même Chose pour  le 32 bit.
 
edit :
 
J'ai ajouter des echo un peu partout comme tu m'avais dit. Mon Programme me troll  :kaola:, il trouve même le "C:\Program Files\*.*", ce qui est grave sur un 64 bit.  :pt1cable:


Message édité par skikito le 24-05-2016 à 14:48:05
Reply

Marsh Posté le 24-05-2016 à 14:54:05    

Chez moi ton code fonctionne... Il n'y avait pas une spécificité pour le Program Files avec le nom indiqué qui n'est pas le vrai ou je ne sais quoi? Tu es sous quel OS? Tu arrives à accéder au dossier en tappant C:\Program Files dans la barre adresse de l'explorer?

 

edit: Apparemment il existe (ou pas) des variables environnement "%ProgramFiles%" et "%ProgramFiles(x86)%" (qui sont censées contenir les chemins d'accès), tu as regardé par là?


Message édité par rat de combat le 24-05-2016 à 14:56:19
Reply

Marsh Posté le 24-05-2016 à 15:03:51    

Je suis Sous Windows 7 pro.
 
Dans mon C: je vois : "Program files (x86)" et "Programmes", et ce dernier est accèssible en tapant c:\program files ... Fuck
 
Faut peut etre que je fasse un truc du genre : Si le premier if voit que le dossier OCS est présent alors on arrête le scrypt ?

Reply

Marsh Posté le 24-05-2016 à 15:10:44    

Tu devrais aller faire un tour sur stackoverflow, il y a pas mal de choses sur ces histoires de 32 vs 64 bit et les dossiers correspondants dans les batch. Evidemment je ne retrouve pas la réponse dont j'ai copié les variables que je citais....

Reply

Marsh Posté le 24-05-2016 à 15:10:44   

Reply

Marsh Posté le 24-05-2016 à 15:14:48    

J'ai peut être une solution (concretement je Change l'algo) mais je vais tapper dans %programdata%
 
Je reviens quand j'ai fini

Reply

Marsh Posté le 24-05-2016 à 16:02:25    

Me revoila.
 
Bon alors, pour ceux que ca Interesse, voici comment je m'en suis sortie :
 
Le problème venais du faite que sur un Windows 64 bit, on a toujours le dossier program files 32 bit, je ne pouvais donc pas demander a mon scrypt de verifier comme ça. Par contre je pense que mn scrypt marche sur un 32 bit ^^
 
Bref du coup j'ai decider de contourné un Probleme en trouvant un endroit qui peut verifier que mon fichier est présent ou non sans passé par programefilesx86 ou programefiles normal. Et j'ai trouvé program data, et tout particulierement le fichier ini (de configuration en gros), qui me permet donc de vérifier la présence de mon logiciel (ici OCS NG), sans se préoccuper de savoir si le Systeme est en 32 ou 64 bit.
 
Voici le scrypt final :
 

Code :
  1. IF NOT EXIST "%PROGRAMDATA%/OCS Inventory NG" (
  2. Start OCS-NG-Windows-Agent-Setup.exe /S /NOSPLASH /INSTALL /SERVER=http://192.168.225.104/ocsinventory /NP /NOW
  3. )


 
Merci pour m'avoir aidé ! Et tout particulierement le rat de combat pour ce temps que tu m'a accordé :p


Message édité par skikito le 24-05-2016 à 16:03:23
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed