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

Résolu
micromega Messages postés 141 Statut Membre -  
micromega Messages postés 141 Statut Membre -
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

17 réponses

  1. micromega Messages postés 141 Statut Membre 1
     
    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
  2. Micromega
     
    Personne n'a d'idée sur ce problème ?

    Merci
    0
  3. Micromega
     
    J'ai fait un autre test mais pas de résultats... je stagne...
    0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. micromega
     
    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
  7. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    enlever le :End
    j'ignore pourquoi

    edit: ou ajouter une commande après:
    :end
    echo bidon>NUL
    0
  8. micromega
     
    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
  9. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  10. micromega
     
    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
  11. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    mettre une commande pause pour voir ce qu'il fait
    0
  12. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  13. micromega Messages postés 141 Statut Membre 1
     
    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
  14. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    dans REG.exe Query %RegQry%

    %RegQry% est vide ? ou contient un espace ?
    0
  15. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  16. micromega Messages postés 141 Statut Membre 1
     
    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
  17. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  18. micromega Messages postés 141 Statut Membre 1
     
    OK C'est parfait.

    Merci à toi encore une fois !
    0