[RÉSOLU] Problèmes divers FOR /F

Problèmes divers FOR /F [RÉSOLU] - Shell/Batch - Programmation

Marsh Posté le 13-06-2006 à 19:19:20    

EDIT :
Le code final qui marche est présent tout à la fin de ce sujet.
Merci à tous et à toute l'équipe  :)

 
Tout d'abord merci de m'accueillir au sein de votre communauté.
Et désolé pour mon titre assez peu explicatif et pour la longueur de ce topic.
 
Je voudrai créer un compilation de vieux pour vider un peu mon disque dur un peu lourd.
J'ai rassemblé tous mes jeux dans un dossier et j'ai voulu créer un menu qui se lance à l'insertion du CD-ROM.
Pas de problème avec Quick Menu Builder.
Cependant je voudrai automatiser un certain nombre de tâches comme détecter la présence ou non de WinRAR pour le télécharger avec IE ou éventuellement Firefox.
 
Le jeu s'appelle CHO-REN-SHA 68K (avis aux amateurs).
J'ai créer le fichier choren.bat suivant avec l'aide de PowerBatch :
 

Code :
  1. @echo off
  2. REM Recherche la valeur par d‚fault de la cl‚ HKCR\Applications\WinRAR.exe\shell\open\command
  3. FOR /F "skip=4 usebackq tokens=4,5 " %%a IN (`REG QUERY HKCR\Applications\WinRAR.exe\shell\open\command /ve`) DO SET WINRAR=%%a %%b
  4. REM Affiche "D:\Program Files\WinRAR\WinRAR.exe" ou ECHO d‚sactiv‚
  5. ECHO %WINRAR%
  6. IF NOT EXIST %WINRAR% DO GOTO WNEXIST
  7. REM ********************** WINRAR n'est pas pr‚sent sur le systŠme **********************
  8. MSG * WinRAR n'est pas install‚ sur le sytSme.
  9. REM Je pourrai aussi ‚crire
  10. REM FOR /F "skip=15 usebackq tokens=3,* " %%c IN (REG QUERY HKCU\Software\Mozilla\ /s) DO SET FIREFOX=%%c %%d %%e
  11. REM Mais ainsi, je peux voir ce que donne REG QUERY...
  12. REG QUERY HKCU\Software\Mozilla\ /s >C:\register.txt
  13. FOR /F "skip=15 tokens=3,* " %%c IN (C:\register.txt) DO SET FIREFOX=%%c %%d %%e
  14. REM Devrait afficher "D:\Program Files\Modzilla Firefox\"
  15. REM mais pour je ne sais quelle raison %FIREFOX%= D:\PROGRA~1\MODZIL~2\plugins\  %e
  16. REM Soit la derniŠre ligne de mon fichier register.txt
  17. ECHO %FIREFOX%
  18. REM Comprenez par l… TEST FIREFOX
  19. :TSTFIRFX
  20. IF NOT EXIST %FIREFOX% DO GOTO IE
  21. REM Doit d‚terminer si Firefox est ouvert mais TEST= ""
  22. REM Si quelqu'un sait comment utiliser cette commande...
  23. REM Vu sur http://www.mozilla.org/unix/remote.html bien que
  24. REM je ne sois pas sous unix, je n'ai pas trouv‚ l'‚quivalent Windows
  25. REM Et comme les autres commandes ( comme open(URL) ) marchent...
  26. SET TEST = %FIREFOX%\mozilla.exe -remote "ping()"
  27. REM Je ne penses pas que ce soit la bonne solution mais...
  28. ECHO TEST
  29. IF "TEST" == "1" START %FIREFOX%\mozilla -remote "openURL(http://www.adc-soft.com/dwl-winrar.htm,new-tab)"
  30. START %FIREFOX%\firefox http://www.adc-soft.com/dwl-winrar.htm
  31. ECHO.
  32. ECHO.
  33.     CHOICE /C:on /N /T:n,15 "Le lien est-il p‚rim‚ ? Choisissez <O>ui ou <N>on (par d‚faut)"
  34.     If ERRORLEVEL==2 goto NON
  35.     If ERRORLEVEL==1 goto OUI
  36.     :OUI
  37.     IF "TEST" == "1" START %FIREFOX%\mozilla -remote "openURL(http://www.google.fr/search?hl=fr&q=t%C3%A9l%C3%A9charger+winRAR&btnG=Rechercher&meta=,new-tab)"
  38.     START %FIREFOX%\firefox http://www.google.fr/search?hl=fr& [...] cher&meta=
  39.     :NON
  40.     EXIT
  41. :IE
  42. START "C:\Program Files\Internet Explorer\iexplore.exe" http://www.mozilla-europe.org/fr/products/firefox/
  43. ECHO.
  44. ECHO DŠs que Firefox est install‚, pressez une touche.
  45. PAUSE >NUL
  46. GOTO TSTFRFX
  47. REM ********************** WINRAR est pr‚sent sur le systŠme ****************************
  48. :WEXIST
  49. REM Demande … l'utilisateur o— installer CHOREN68K
  50. SET /P Dest="D:\JEUX"
  51. %WINRAR%\WInRAR x %Drive%\JEUX\Choren 68K\CHOREN 68K PROJECT.7z" *.* "%Dest%"
  52. PAUSE >NUL


 
Désolé pour les couleurs, les balises fonctionnent assez bizarrement sous

Code :
  1. La fenêtre de code


 
Ah et pour ceux qui ne comprendraient pas...


     ‚     Š     …     —          OEM
     é     è     à     ù          ANSI


 
J'ai essayé de commenter au mieux mais je peux toujours mieux expliquer...
Tous les ECHO peuvent être enlevés.
 
Ah oui, j'oubliais le plus important  :wahoo:


     *****     CONTENU DE C:\register.txt     *****
 
 
! REG.EXE VERSION 3.0
 
HKEY_CURRENT_USER\Software\Mozilla\
    <SANS NOM> REG_SZ  
 
HKEY_CURRENT_USER\Software\Mozilla\\Mozilla
    CurrentVersion REG_SZ 1.7.12
 
HKEY_CURRENT_USER\Software\Mozilla\\Mozilla Firefox
    CurrentVersion REG_SZ 1.5.0.4 (fr)
 
HKEY_CURRENT_USER\Software\Mozilla\\Mozilla Firefox\1.5.0.4 (fr)
 
HKEY_CURRENT_USER\Software\Mozilla\\Mozilla Firefox\1.5.0.4 (fr)\Main
    Install Directory REG_SZ D:\Program Files\Modzilla Firefox\
    PathToExe REG_SZ D:\Program Files\Modzilla Firefox\firefox.exe
    Program Folder Path REG_SZ C:\Documents and Settings\All Users\Menu Démarrer\Programmes\Mozilla Firefox\
 
HKEY_CURRENT_USER\Software\Mozilla\\Mozilla Firefox\1.5.0.4 (fr)\Uninstall
    Description REG_SZ Mozilla Firefox (1.5.0.4)
    Uninstall Log Folder REG_SZ D:\Program Files\Modzilla Firefox\uninstall
 
HKEY_CURRENT_USER\Software\Mozilla\\Mozilla Firefox 1.5.0.4
    GeckoVer REG_SZ 1.8.0.4
 
HKEY_CURRENT_USER\Software\Mozilla\\Mozilla Firefox 1.5.0.4\bin
    PathToExe REG_SZ D:\Program Files\Modzilla Firefox\firefox.exe
 
HKEY_CURRENT_USER\Software\Mozilla\\Mozilla Firefox 1.5.0.4\Extensions
    Components REG_SZ D:\Program Files\Modzilla Firefox\components\
    Plugins REG_SZ D:\Program Files\Modzilla Firefox\plugins\
 
HKEY_CURRENT_USER\Software\Mozilla\\Mozilla Thunderbird
    CurrentVersion REG_SZ 1.5.0.4 (fr)
 
HKEY_CURRENT_USER\Software\Mozilla\\Mozilla Thunderbird\1.5.0.4 (fr)
 
HKEY_CURRENT_USER\Software\Mozilla\\Mozilla Thunderbird\1.5.0.4 (fr)\Main
    Install Directory REG_SZ D:\PROGRA~1\MODZIL~2\
    PathToExe REG_SZ D:\PROGRA~1\MODZIL~2\THUNDE~1.EXE
    Program Folder Path REG_SZ C:\Documents and Settings\All Users\Menu Démarrer\Programmes\Mozilla Thunderbird\
 
HKEY_CURRENT_USER\Software\Mozilla\\Mozilla Thunderbird\1.5.0.4 (fr)\Uninstall
    Description REG_SZ Mozilla Thunderbird (1.5.0.4)
    Uninstall Log Folder REG_SZ D:\PROGRA~1\MODZIL~2\uninstall
 
HKEY_CURRENT_USER\Software\Mozilla\\Mozilla Thunderbird 1.5.0.4
    GeckoVer REG_SZ 1.8.0.4
 
HKEY_CURRENT_USER\Software\Mozilla\\Mozilla Thunderbird 1.5.0.4\bin
    PathToExe REG_SZ D:\PROGRA~1\MODZIL~2\THUNDE~1.EXE
 
HKEY_CURRENT_USER\Software\Mozilla\\Mozilla Thunderbird 1.5.0.4\Extensions
    Components REG_SZ D:\PROGRA~1\MODZIL~2\components\
    Plugins REG_SZ D:\PROGRA~1\MODZIL~2\plugins\


 
Merci encore


Message édité par Tsuki_Kuroi le 15-06-2006 à 09:58:59

---------------
En tant que newbie je m'incline devant votre éminance.
Reply

Marsh Posté le 13-06-2006 à 19:19:20   

Reply

Marsh Posté le 13-06-2006 à 20:51:20    

Salut et bienvenue,
 
J'ai lu ton post, mais je ne comprends pas où tu es bloqué précisément :??:

Reply

Marsh Posté le 13-06-2006 à 21:29:14    

wackevat a écrit :

Salut et bienvenue,
 
J'ai lu ton post, mais je ne comprends pas où tu es bloqué précisément :??:


 
Et bien ici

Citation :


REG QUERY HKCUSoftwareMozilla /s >C:register.txt
FOR /F "skip=15 tokens=3,* " %%c IN (C:register.txt) DO SET FIREFOX=%%c %%d %%e
 
 
REM Devrait afficher "D:\Program Files\Modzilla Firefox\"
REM mais pour je ne sais quelle raison %FIREFOX%= D:\PROGRA~1\MODZIL~2\plugins\ %e


 
SET FIREFOX donne D:\PROGRA~1\MODZIL~2\plugins\ %e
au lieu de "D:\Program Files\Modzilla Firefox\"
Je ne voit pas où est mon erreur, le résultat est le même pour skip=1 ou 2,5,10 ou 20
 
et ici je cherche à savoir si le navigateur firefox est ouvert mais cette commande est spécifique au logiciel

Citation :


 
SET TEST = %FIREFOX%\mozilla.exe -remote "ping()"
 
REM Je ne penses pas que ce soit la bonne solution mais...


Comme dit plus haut, TEST= "", avis aux connaisseurs donc
 
 
Je suis désolé que mon "code" soit barboullé de rouge, c'est peu clair mais je n'y peu rien


---------------
En tant que newbie je m'incline devant votre éminance.
Reply

Marsh Posté le 13-06-2006 à 22:23:21    

Ok, je vois.
 
Pour ton premier problème, c'est le \ qui a faussé le résultat. Enlève manuellement ce \ dans le registre pour vérif.
 
Pour le deuxième, normalement, ça doit retourner quoi la commande -remote "ping()" ? Un code d'erreur ? Si c'est le cas, essaie ErrorLevel, parce que  
set VAR=commande
n'est pas la bonne syntaxe.
 
Sinon, évite les espaces "de décoration" si tu ne veux pas avoir de mauvaises surprises. Ecris :
set VAR=valeur
plutôt que :
set VAR = valeur
 
Donc, syntaxe corrigée :
SET TEST=%FIREFOX%\mozilla.exe -remote "ping()"
 
TEST recevra comme valeur :
%FIREFOX%\mozilla.exe -remote "ping()"
 
avec éventuellement la valeur %FIREFOX% remplacée par le chemin du programme, et pas du tout le code de retour de la commande.

Reply

Marsh Posté le 14-06-2006 à 15:24:13    

:) Alors me revoilà, je reviens des forums de Geckozone (forums mozilla) et ils m'ont conseillé.
 
Donc au lieu de

Code :
  1. SET TEST = %FIREFOX%\mozilla.exe -remote "ping()"
  2. ECHO TEST
  3. IF "TEST" == "1" START %FIREFOX%\mozilla -remote "openURL(http://www.adc-soft.com/dwl-winrar.htm,new-tab)"
  4. START %FIREFOX%\firefox http://www.adc-soft.com/dwl-winrar.htm


              Cela donne

Code :
  1. FOR /F "skip=5 usebackq delims=/ tokens=2,*" %%A IN ("%USERPROFILE%\Application Data\Mozilla\Firefox\profiles.ini" ) DO SET PROFILE=%%A
  2. IF     EXIST "%USERPROFILE%\Application Data\Mozilla\Firefox\Profiles\%PROFILE%\parent.lock" START %FIREFOX%\mozilla -remote "openURL(http://www.adc-soft.com/dwl-winrar.htm,new-tab)"
  3. IF NOT EXIST "%USERPROFILE%\Application Data\Mozilla\Firefox\Profiles\%PROFILE%\parent.lock" START %FIREFOX%\firefox http://www.adc-soft.com/dwl-winrar.htm


 
Cependant, pour comprendre le problème du FOR /F, j'ai écrit seul et dans une nouvelle session de PowerBatch

Code :
  1. REG QUERY HKCU\Software\Mozilla /s >C:\register.txt
  2. FOR /F "skip=15 tokens=4,5,6 " %%c IN (C:\register.txt) DO SET FIREFOX=%%c %%d %%e


Ce qui donne sous l'interpréteur de commande


C:\DOCUME~1\ALEXAN~1\LOCALS~1\Temp>REG QUERY HKCU\Software\Mozilla /s  1>C:\regi
ster.txt
 
C:\DOCUME~1\ALEXAN~1\LOCALS~1\Temp>FOR /F "skip=15 tokens=4,5,6 " %c IN (C:\regi
ster.txt) DO SET FIREFOX=%c %d %e
 
C:\DOCUME~1\ALEXAN~1\LOCALS~1\Temp>SET FIREFOX=D:\Program Files\Modzilla Firefox
\
 
C:\DOCUME~1\ALEXAN~1\LOCALS~1\Temp>SET FIREFOX=Files\Modzilla Firefox\firefox.ex
e
 
C:\DOCUME~1\ALEXAN~1\LOCALS~1\Temp>SET FIREFOX=REG_SZ C:\Documents and
 
C:\DOCUME~1\ALEXAN~1\LOCALS~1\Temp>SET FIREFOX=Firefox (1.5.0.4)
 
C:\DOCUME~1\ALEXAN~1\LOCALS~1\Temp>SET FIREFOX=REG_SZ D:\Program Files\Modzilla
 
 
C:\DOCUME~1\ALEXAN~1\LOCALS~1\Temp>SET FIREFOX=Files\Modzilla Firefox\firefox.ex
e
 
C:\DOCUME~1\ALEXAN~1\LOCALS~1\Temp>SET FIREFOX=Files\Modzilla Firefox\components
\
 
C:\DOCUME~1\ALEXAN~1\LOCALS~1\Temp>SET FIREFOX=Files\Modzilla Firefox\plugins\
 
 
C:\DOCUME~1\ALEXAN~1\LOCALS~1\Temp>SET FIREFOX=(fr)
 
C:\DOCUME~1\ALEXAN~1\LOCALS~1\Temp>SET FIREFOX=D:\PROGRA~1\MODZIL~2\
 
C:\DOCUME~1\ALEXAN~1\LOCALS~1\Temp>SET FIREFOX=REG_SZ C:\Documents and
 
C:\DOCUME~1\ALEXAN~1\LOCALS~1\Temp>SET FIREFOX=Thunderbird (1.5.0.4)
 
C:\DOCUME~1\ALEXAN~1\LOCALS~1\Temp>SET FIREFOX=REG_SZ D:\PROGRA~1\MODZIL~2\unins
tall
 
╔═════════════════════╗
║ Exécution terminée. ║
╚═════════════════════╝
 
Pour désactiver la fonction de pause auto. en fin de batch :
Edition/Configuration de PowerBatch/Avancées/Exécution
 
Appuyez sur une touche pour terminer.


 
Donc le premier
SET FIREFOX=D:\Program Files\Modzilla Firefox\
est bon, mais il fait la recherche pour les autres lignes, ce qui remplace mon %FIREFOX% à chaque fois (d'où le coup de la dernière ligne du fichier)
 
Et maintenant, comment arrêter le processus de FOR /F ?
 
Allez, un dernier effort et ce topic sera [RÉSOLU].


---------------
En tant que newbie je m'incline devant votre éminance.
Reply

Marsh Posté le 14-06-2006 à 21:07:25    

Code :
  1. for ... do (
  2.   set FIREFOX=...
  3.   goto :allez_hop
  4. )
  5. :allez_hop


 
:D

Reply

Marsh Posté le 15-06-2006 à 09:56:22    

Ok, alors voilà mon dernier post car mon code marche.
J'ai remarqué qu'avec les balises code, certains \ sont omis
(voir post précédent au dessus-de Ce qui donne sous l'interpréteur de commande)
 
Donc, voilà mon code final, pour ceux que ça intéresse... et je modifie mon premier post.
 


@echo off
 
REM Recherche la valeur par défault de la clé HKCR\Applications\WinRAR.exe\shell\open\command
FOR /F "skip=4 usebackq tokens=4,5 " %%a IN (`REG QUERY HKCR\Applications\WinRAR.exe\shell\open\command /ve`) DO SET WINRAR=%%a %%b
 
IF EXIST %WINRAR% GOTO WEXIST
 
REM ********************** WINRAR n'est pas présent sur le système **********************
MSG * WinRAR n'est pas install‚ sur le sytŠme.
 
 
FOR /F "usebackq skip=15 tokens=4,5,6 " %%c IN (`REG QUERY HKCU\Software\Mozilla /s`) do (
SET FIREFOX="%%c %%d %%e
GOTO TSTFIRFX
      )
 
REM Comprenez par là TEST FIREFOX
:TSTFIRFX
 
IF NOT EXIST %FIREFOX%firefox.exe" GOTO IE
 
 
FOR /F "skip=5 usebackq delims=/ tokens=2,*" %%A IN ("%USERPROFILE%\Application Data\Mozilla\Firefox\profiles.ini" ) DO SET PROFILE=%%A
 
IF     EXIST "%USERPROFILE%\Application Data\Mozilla\Firefox\Profiles\%PROFILE%\parent.lock"  %FIREFOX%mozilla.exe" -remote openURL(http://www.adc-soft.com/dwl-winrar.htm,new-tab)
IF NOT EXIST "%USERPROFILE%\Application Data\Mozilla\Firefox\Profiles\%PROFILE%\parent.lock"  %FIREFOX%firefox.exe" http://www.adc-soft.com/dwl-winrar.htm
ECHO.
ECHO.
 
    CHOICE /C:on /N /T:n,15 "Le lien est-il p‚rim‚ ? Choisissez <O>ui ou <N>on (par d‚faut)"
    If ERRORLEVEL==2 GOTO NON
    If ERRORLEVEL==1 GOTO OUI
 
    :OUI
    IF     EXIST "%USERPROFILE%\Application Data\Mozilla\Firefox\Profiles\%PROFILE%\parent.lock" %FIREFOX%mozilla.exe" -remote openURL("http://www.google.fr/search?hl=fr&q=telecharger+winRAR&btnG=Rechercher&meta=",new-tab)
    IF NOT EXIST "%USERPROFILE%\Application Data\Mozilla\Firefox\Profiles\%PROFILE%\parent.lock" %FIREFOX%firefox.exe" "http://www.google.fr/search?hl=fr&q=telecharger+winRAR&btnG=Rechercher&meta="
 
    :NON
    EXIT
 
 :IE
 "C:\Program Files\Internet Explorer\iexplore.exe" http://www.mozilla-europe.org/fr/products/firefox/
 ECHO.
 ECHO DŠs que Firefox est install‚, pressez une touche.
 PAUSE >NUL
 GOTO TSTFIRFX
 
REM ********************** WINRAR est présent sur le système ****************************
:WEXIST
 
REM Demande à l'utilisateur où installer CHOREN68K
SET /P Dest=Dans quel r‚pertoire voulez-vous installer CHOREN68K ?
%WINRAR% x "D:\AA_GRAVER\JEUX\Choren 68K\CHOREN 68K PROJECT.7z" *.* "%Dest%"


Message édité par Tsuki_Kuroi le 15-06-2006 à 09:56:51

---------------
En tant que newbie je m'incline devant votre éminance.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed