Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1488 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [BATCH] Problèmes IF

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[BATCH] Problèmes IF

n°2282147
skikito
Posté le 24-05-2016 à 12:06:07  profilanswer
 

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
mood
Publicité
Posté le 24-05-2016 à 12:06:07  profilanswer
 

n°2282150
Chelmi18
Posté le 24-05-2016 à 13:01:31  profilanswer
 

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)\*.*"

n°2282152
skikito
Posté le 24-05-2016 à 13:13:17  profilanswer
 

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:  
 

n°2282155
rat de com​bat
attention rongeur méchant!
Posté le 24-05-2016 à 13:54:22  profilanswer
 

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
n°2282158
skikito
Posté le 24-05-2016 à 14:24:05  profilanswer
 

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
n°2282159
rat de com​bat
attention rongeur méchant!
Posté le 24-05-2016 à 14:27:16  profilanswer
 

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.

n°2282162
skikito
Posté le 24-05-2016 à 14:35:14  profilanswer
 

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
n°2282165
rat de com​bat
attention rongeur méchant!
Posté le 24-05-2016 à 14:54:05  profilanswer
 

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
n°2282167
skikito
Posté le 24-05-2016 à 15:03:51  profilanswer
 

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 ?

n°2282168
rat de com​bat
attention rongeur méchant!
Posté le 24-05-2016 à 15:10:44  profilanswer
 

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

mood
Publicité
Posté le 24-05-2016 à 15:10:44  profilanswer
 

n°2282169
skikito
Posté le 24-05-2016 à 15:14:48  profilanswer
 

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

n°2282173
skikito
Posté le 24-05-2016 à 16:02:25  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [BATCH] Problèmes IF

 

Sujets relatifs
script batch désinstallation de logiciels 64 et 32 bits[Batch] Copier uniquement certains sous dossiers
[BATCH] Script de comparaison valeur de registre avec valeur en durBATCH, FOR/R rename fichier avec espace dans le nom
Batch qui passe une séquence clavier à MSPAINTFichier batch
Appel batch à partir script powershellArrêt d'un PC avec un script batch
sed : remplacer valeurs batch sur 2 gigas de donnéesDe serieux problemes avec mon formulaire
Plus de sujets relatifs à : [BATCH] Problèmes IF


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR