.Bat : Commande de lancement spéciale (32bits + 64bits)

Résolu/Fermé
micromega Messages postés 131 Date d'inscription lundi 13 avril 2009 Statut Membre Dernière intervention 12 avril 2020 - 5 oct. 2014 à 22:47
micromega Messages postés 131 Date d'inscription lundi 13 avril 2009 Statut Membre Dernière intervention 12 avril 2020 - 30 oct. 2014 à 13:06
Bonjour à tous,

J'aurais besoin qu'une commande .bat me lance un programme sur un disque amovible en fonction du processeur du PC.

J'ai les deux commandes qui fonctionnent une à une (lancer depuis un disque amovible + lancer un fichier en fonction du processeur).

MAIS, lorsque je regroupe les deux cela ne fonctionne plus.

Par déduction simple, le placement que j'ai fait n'est pas bon.

Comment puis-je donc intégrer la commande de lancement de fichier en fonction du type de processeur ?


Voici ce que j'avais essayé :




@Echo off

set d=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
for %%a in (%d%) do (
for /F "tokens=1" %%k in ('fsutil fsinfo drivetype %%a: ^| findstr "CD-ROM"') do (
if exist "%%k\CHEMIN FICHIER A LANCER" (

Set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0
REG.exe Query %RegQry% | Find /i "x86"
If %ERRORLEVEL% == 0 (
GOTO X86
) ELSE (
GOTO X64
)

:X86
call "%%k\CHEMIN FICHIER A LANCER" >NUL 2>&1
GOTO END
:X64
call "%%k\CHEMIN FICHIER A LANCER" >NUL 2>&1
:End

)
)
)




Merci
A voir également:

17 réponses

micromega Messages postés 131 Date d'inscription lundi 13 avril 2009 Statut Membre Dernière intervention 12 avril 2020 1
24 oct. 2014 à 01:22
Rien. Ca s'ouvre, se ferme. Rien de plus.


Je redécompose :



@Echo off 
set d=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
for %%a in (%d%) do (
for /F "tokens=1" %%k in ('fsutil fsinfo drivetype %%a: ^| findstr "CD-ROM"') do (
if exist "%%k\CHEMIN FICHIER A LANCER" (

call "%%k\CHEMIN FICHIER A LANCER" >NUL 2>&1

)
)
)



= ça fonctionne

Si je fais :



@echo off
Set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0
REG.exe Query %RegQry% | Find /i "x86"
If %ERRORLEVEL% == 0 (
GOTO X86
) ELSE (
GOTO X64
)

:X86
call "%%k\CHEMIN FICHIER A LANCER" >NUL 2>&1

GOTO END

:X64
call "%%k\CHEMIN FICHIER A LANCER" >NUL 2>&1

:End



= ça fonctionne.


C'est le fait de placer le seconde commande dans la première qui pose problème.
Soit elle est mal placé (mais j'ai fait des tests de toutes sortes), soit il manque une partie de code (que je ne connais pas)...
1
Personne n'a d'idée sur ce problème ?

Merci
0
J'ai fait un autre test mais pas de résultats... je stagne...
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
14 oct. 2014 à 14:57
hello
essayer avec ! à la place de % dans une boucle FOR
@Echo off
setlocal enabledelayedexpansion
set d=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
for %%a in (%d%) do (
for /F "tokens=1" %%k in ('fsutil fsinfo drivetype %%a: ^| findstr "CD-ROM"') do (
if exist "%%k\CHEMIN FICHIER A LANCER" (

Set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0
REG.exe Query !RegQry! | Find /i "x86"
If !ERRORLEVEL! == 0 (
GOTO X86
) ELSE (
GOTO X64
)
......
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour Dubcek,

Merci d'avoir répondu.

J'ai essayé en remplaçant les " % " par des " ! ", mais toujours pas résultat.

La commande s'ouvre et se ferme aussitôt en cliquant dessus.
Si je l'ouvre avec l'Invite de commande, ça me dit que "La syntaxe de la commande est incorrecte".

Le souci viens de la commande de recherche du type de processeur. A elle seule, cela fonctionne, mais incorporée à l'autre commande cela bloque.

Merci
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
Modifié par dubcek le 16/10/2014 à 09:20
enlever le :End
j'ignore pourquoi

edit: ou ajouter une commande après:
:end
echo bidon>NUL
0
Bon... alors :

Si je remets des "%" à la place des "!", j'obtiens un résultat différent en ayant enlevé le ":end" :

Avec l'invite de commande, j'obtiens ce message :

Erreur : nombre insuffisant de paramètres de ligne de commande
Le système ne peut pas trouver le nom de fichier de commandes - END

Si je lance en cliquant dessus, ça s'ouvre...puis un peu après ça se referme tout seul

Je ne peux pas ajouter de commande après ":end" car les "call" selon le processeur doivent s'effectuer avant.

Par contre si je supprime "GOTO END" + ":end" j'obtiens :

Erreur : nombre insuffisant de paramètres de ligne de commande

ça change...
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
Modifié par dubcek le 17/10/2014 à 08:59
nombre insuffisant de paramètres de ligne de commande
cette erreur est générée par le call, je ne connais pas le script

ajouter une commande "bidon" après le :end ne change rien au code
0
Bonjour,

Si j'ajoute un une commande après le ":end", j'obtiens le même résultat :

fenêtre qui s'ouvre et se ferme automatiquement...
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
22 oct. 2014 à 08:02
mettre une commande pause pour voir ce qu'il fait
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
24 oct. 2014 à 09:53
C'est le fait de placer le seconde commande dans la première qui pose problème.
je suis pas sûr de comprendre
faire ca ?
If %ERRORLEVEL% == 0 ( 
call "%%k\CHEMIN FICHIER A LANCER" >NUL 2>&1
) ELSE (
call "%%k\CHEMIN FICHIER A LANCER" >NUL 2>&1
)
0
micromega Messages postés 131 Date d'inscription lundi 13 avril 2009 Statut Membre Dernière intervention 12 avril 2020 1
24 oct. 2014 à 11:07
Bonjour Dubcek,

Il y a eu une évolution.

Maintenant le commande se lance correctement (elle ne se ferme pas toute seule), mais j'obtiens le message d'erreur suivant :

ERREUR : syntaxe incorrecte.
Entrez "REG QUERY /?" pour afficher la syntaxe.


Pour "C'est le fait de placer le seconde commande dans la première qui pose problème", je voulais dire de placer le code qui lance un fichier selon le processeur dans l'autre code (voir précédent poste, j'ai séparé les 2 codes car l'un ou l'autre fonctionne tout seul, mais pas ensemble).

Merci
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
24 oct. 2014 à 12:21
dans REG.exe Query %RegQry%

%RegQry% est vide ? ou contient un espace ?
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
24 oct. 2014 à 14:18
c'est ça que tu veux faire ?
setlocal enabledelayedexpansion
set d=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
for %%a in (%d%) do (
for /F "tokens=1" %%k in ('fsutil fsinfo drivetype %%a: ^| findstr "CD-ROM"') do (
if exist "%%k\CHEMIN FICHIER A LANCER" (
Set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0
REG.exe Query !RegQry! | Find /i "x86"
If !ERRORLEVEL! == 0 (
call "%%k\CHEMIN FICHIER A LANCER" >NUL 2>&1
) ELSE (
call "%%k\CHEMIN FICHIER A LANCER" >NUL 2>&1
)
goto fin
)
)
)
:fin
pause
0
micromega Messages postés 131 Date d'inscription lundi 13 avril 2009 Statut Membre Dernière intervention 12 avril 2020 1
28 oct. 2014 à 11:56
Bonjour Dubcek,

Bon bah encore une fois merci : ça semble fonctionner ainsi.

Juste deux questions liées à mes erreurs :

1) Quel est la différence entre "!RegQry!" et "%RegQry%", puis entre "!ERRORLEVEL!" et "%ERRORLEVEL%" ?

2) Dans le script que tu m'as donné tu place un ")ELSE(" entre le ":X86" et le ":X64" --> selon le processeur il va sur la bonne ligne à exécuter ou alors il teste les deux lignes succéssivement?

Merci à toi
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
28 oct. 2014 à 14:36
setlocal enabledelayedexpansion et !variable! est nécessaire pour les variables modifiées à l'intérieur d'une boucle for
If !ERRORLEVEL! == 0 (
call "%%k\CHEMIN FICHIER A LANCER" >NUL 2>&1
) ELSE (
call "%%k\CHEMIN FICHIER A LANCER" >NUL 2>&1
)

si find trouve x86 errorlevel==0, donc il exécute le 1er sinon le 2ème
0
micromega Messages postés 131 Date d'inscription lundi 13 avril 2009 Statut Membre Dernière intervention 12 avril 2020 1
30 oct. 2014 à 13:06
OK C'est parfait.

Merci à toi encore une fois !
0