.BAT : Problème ave GOTO END > :END
Fermé
micromega
Messages postés
131
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 avril 2020
-
11 févr. 2015 à 01:50
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 - 21 févr. 2015 à 09:57
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 - 21 févr. 2015 à 09:57
A voir également:
- Goto end
- Fichier bat - Guide
- Bat to exe converter - Télécharger - Édition & Programmation
- Pokemon qui bat qui ✓ - Forum Pokémon
- Exécuter un fichier bat automatiquement - Forum Autoit / batch
- Bouchou ka bat traduction ✓ - Forum traduction
3 réponses
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
12 févr. 2015 à 10:09
12 févr. 2015 à 10:09
n'est-ce pas le même problème que là https://forums.commentcamarche.net/forum/affich-30876685-bat-commande-de-lancement-speciale-32bits-64bits#5
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
17 févr. 2015 à 14:38
17 févr. 2015 à 14:38
essaye de changer l'algorithme pour n'avoir ni call ni goto à l'intérieur des boucles for
micromega
Messages postés
131
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 avril 2020
1
18 févr. 2015 à 12:37
18 févr. 2015 à 12:37
Le problème est bien les GoTo.
J'ai retourné le problème dans tout les sens et à moins de prendre un chemin de traverse (exécuter l'opération en appelant un autre bat), je ne vois pas de meilleure solution.
Cependant, y a t'il (dans l'exécution) une différence entre ces deux types de codes (action en fonction de l'architecture) :
et
Le premier semble plus simple et moins lourd.
Qu'en pensez-vous ?
J'ai retourné le problème dans tout les sens et à moins de prendre un chemin de traverse (exécuter l'opération en appelant un autre bat), je ne vois pas de meilleure solution.
Cependant, y a t'il (dans l'exécution) une différence entre ces deux types de codes (action en fonction de l'architecture) :
@ Echo off
IF EXIST "%PROCESSOR_ARCHITECTURE%"=="x86" (GOTO [32 Bits]) ELSE (GOTO [64 Bits])
:[32 Bits]
call "%%k\DOSSIER\DOSSIER A\Programme32.exe " >NUL 2>&1
GOTO END
:[64 Bits]
call "%%k\DOSSIER\DOSSIER A\Programme64.exe " >NUL 2>&1
GOTO END
:END
et
@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
Copy "Chemin Fichier Source.exe" "Chemin Dossier Destination" >NUL 2>&1
GOTO END
:X64
Copy "Chemin Fichier Source.exe" "Chemin Dossier Destination" >NUL 2>&1
:End
Le premier semble plus simple et moins lourd.
Qu'en pensez-vous ?
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
18 févr. 2015 à 14:40
18 févr. 2015 à 14:40
je trouve les goto inutiles
comme disait db_belmontet, le IF EXIST est faux
et comme ca
comme disait db_belmontet, le IF EXIST est faux
et comme ca
@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\DOSSIER\DOSSIER A" set L=%%k
)
)
IF "%PROCESSOR_ARCHITECTURE%"=="x86" (
call "%L%\DOSSIER\DOSSIER A\Programme32.exe " >NUL 2>&1
) else (
call "%L%\DOSSIER\DOSSIER A\Programme64.exe " >NUL 2>&1
)
micromega
Messages postés
131
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 avril 2020
1
19 févr. 2015 à 17:56
19 févr. 2015 à 17:56
Le dernier code ne change pas le problème.
J'ai rectifié le IF EXIST comme l'avait suggéré db_belmontet.
En revanche je viens de faire une découverte lié à ce problème :
Si je fais :
Cela fonctionne.
Si je fais :
Le fait de mettre "Programme2.exe" dans un autre dossier (contenu dans DOSSIER A) bloque l'exécution de la commande.
Cela peut-il venir de :
J'ai rectifié le IF EXIST comme l'avait suggéré db_belmontet.
En revanche je viens de faire une découverte lié à ce problème :
Si je fais :
call "%%k\\DOSSIER\DOSSIER A\Programme2.exe"
Cela fonctionne.
Si je fais :
call "%%k\\DOSSIER\DOSSIER A\DOSSIER B\Programme2.exe"
Le fait de mettre "Programme2.exe" dans un autre dossier (contenu dans DOSSIER A) bloque l'exécution de la commande.
Cela peut-il venir de :
@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\DOSSIER\DOSSIER A" (
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
20 févr. 2015 à 15:45
20 févr. 2015 à 15:45
si le chemin %%k\\DOSSIER\DOSSIER A\DOSSIER B\Programme2.exe existe ca doit fonctionner
micromega
Messages postés
131
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 avril 2020
1
20 févr. 2015 à 23:40
20 févr. 2015 à 23:40
Exact !
En fait je n'avais pas pris en compte un point : un ".bat" qui lance un autre ".bat" s'exécute dans la même fenêtre.
Donc :
LORSQU'UN fichier bat est lancé par un autre, l'enchainement d'exécution peut ne pas fonctionner du fait que le premier bat va exécuter les opérations dans la même fenêtre.
Ainsi il faut redétailler les chemin des commandes du second bat appelé à partir de là où se trouve le premier.
Je ne sais pas si c'est clair, mais pour moi ça l'est un peu plus.
Bon dans tous les cas j'ai pas résolu le problème avec les Goto + End malgré vos interventions.
A défaut donc, j'ai pris le chemin de traverse en exécutant la commande en fonction de l'architecture en externe : un bat en appelant un autre.
Et là tout roule...
Merci !
En fait je n'avais pas pris en compte un point : un ".bat" qui lance un autre ".bat" s'exécute dans la même fenêtre.
Donc :
LORSQU'UN fichier bat est lancé par un autre, l'enchainement d'exécution peut ne pas fonctionner du fait que le premier bat va exécuter les opérations dans la même fenêtre.
Ainsi il faut redétailler les chemin des commandes du second bat appelé à partir de là où se trouve le premier.
Je ne sais pas si c'est clair, mais pour moi ça l'est un peu plus.
Bon dans tous les cas j'ai pas résolu le problème avec les Goto + End malgré vos interventions.
A défaut donc, j'ai pris le chemin de traverse en exécutant la commande en fonction de l'architecture en externe : un bat en appelant un autre.
Et là tout roule...
Merci !
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
21 févr. 2015 à 09:57
21 févr. 2015 à 09:57
goto dans une boucle for ne fonctionne pas ,il faut passer par un call, et dans le call le goto fonctionne, même si le call est dans la boucle
exemple là https://stackoverflow.com/questions/11177419/batch-file-goto-in-for-loop
exemple là https://stackoverflow.com/questions/11177419/batch-file-goto-in-for-loop
16 févr. 2015 à 15:01
Après différents tests : il s'agit d'un problème différent.
Après le :END, cela semble bloquer l'exécution du dernier call comme si la variable du début n'était plus respectée.
J'obtiens comme erreur à l'exécution de ce call: Le chemin d'accès spécifié est introuvable.
En revanche les "echo" ou les "pause" qui suivent fonctionnent.
Merci pour le retour.
Modifié par dg_belmontet le 16/02/2015 à 16:45
En regardant le code du batch mis dans ce post, je pense qu'il y a au moins deux erreurs de syntaxe.
1 - IF EXIST "%PROCESSOR_ARCHITECTURE%"=="x86" (GOTO [32 Bits]) ELSE .....
On ne met pas "If exist ....." sur un test de variable mais de préférence:
If /I %processor_architecture%==x86 (GOTO.....
2- Dans la ligne suivante après l'étiquette :END
call "%%k\\DOSSIER\DOSSIER A\Programme2.exe" >NUL 2>&1
Il y a 2 \ après %%k et cela n'est pas un chemin valide.
Aussi, bien prendre ne compte la remarque de Dubcek au niveau des déclarations de variables dans une boucle (si cela ne fonctionne toujours pas).
Cordialement.
16 févr. 2015 à 21:55
J'ai bien essayé en suivant les indications données mais sans résultat positif.
1) Cela bloque l'exécution du code qui agit en fonction de l'architecture du PC.
2) J'ai corrigé le / en trop, mais cela n'a rien changé au problème (ça aurait été trop simple ;)).
Je continue de chercher....si vous avez encore des pistes à explorer.
Merci en tout cas pour vos aides.