Problèmes IF [BATCH] - Shell/Batch - Programmation
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 :
|
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 !
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 :
|
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 :
|
Marsh Posté le 24-05-2016 à 14:24:05
Salut !
Voila mon code pour exemple:
Code :
|
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
Marsh Posté le 24-05-2016 à 14:27:16
Pas compris
>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.
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
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 , il trouve même le "C:\Program Files\*.*", ce qui est grave sur un 64 bit.
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à?
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 ?
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....
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
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 :
|
Merci pour m'avoir aidé ! Et tout particulierement le rat de combat pour ce temps que tu m'a accordé
Marsh Posté le 24-05-2016 à 12:06:07
Salut
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 cprogram files (x86) Avec un 32 bit Sinon il trouvera jamais si mon exe est déjà installé ou pas avec un 32 bit.
Puis c'est déjà bien hein
Bref c'est pas grand chose... Mais j'ai jamais fait de Batch donc bon
Voici ce que j'ai pour l'instant :
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