Condition .bat

Résolu
Bonjour,
Je voux eplique mon problème j'ai fait un script (.bat) qui install un logiciel puis qui crée un raccourci dans le menu démarré pour windows 7 pas de problème mais pour windows Xp le chemin n'est pas le même je voudrais ne pas avoir à faire deux script donc j'aimerais mettre une condition dans mon script "if" sauf que je sais pas comment le placer quelqu'un pourrait m'aider ?

je vous copie mon script (celui fonctionne bien pour windows 7 ):
 ::@echo

set source=Portable_Audacity

set destination=C:\Applications
set dest_programm=Portable_Audacity

mkdir "%destination%\%dest_programm%"
xcopy "%source%" "%destination%\%dest_programm%\"/E
copy "%source%\AudacityPortable.lnk" %Userprofile%"\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\AudacityPortable.lnk"
exit

Comment faire pour mettre une condition pour que si le script ne reconnait pas windows 7 il le passe en tant que windows Xp ?

Cordialement, Dr4go56
Bat toi avec les meilleurs ou crève avec les autres.

5 réponses

  1. Bonjour,

    il faut tester la version windows et ensuite faire le IF.
    Teste la clé de registre, si tu ne l'a pas je regarde
    cordialement,
    1. Pour m'exprimer plus clairement si mon raccourci %Userprofile%"\AppData\Roaming éxiste sur Windows alors placer le racourci ici si il n'éxiste pas alors le placer dans C:\Documents and settings\utilisateur\Menu démarrer\Programmes

      Cordialement, Dr4go56
      Bat toi avec les meilleurs ou crève avec les autres.
      1. Re

        je regarde cet après midi mais cela me parait pas compliquer
        j'ai réalisé certain batch qui possède les instructions donc je regarde cet AP
        1. J'en suis ici :
          ::@echo

          set source=Portable_Audacity

          set destination=C:\Applications
          set dest_programm=Portable_Audacity

          mkdir "%destination%\%dest_programm%"
          xcopy "%source%" "%destination%\%dest_programm%\"/E

          if exist %Userprofile%"\AppData (copy "%source%\AudacityPortable.lnk" %Userprofile%"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\AudacityPortable.lnk") else (copy "C:\Documents and Settings\Utilisateur\Bureau\XP\Portable_Audacity\AudacityPortable.lnk" "%userprofile%\Menu D'marrer")

          pause

          ::exit

          Maintenant mon problème arrive au niveau de "if" voyez vous mon erreur ?
      2. Re,

        Utilise la fonction move

        if exist "%Userprofile%"\AppData\Roaming\nom fichier" (move "%Userprofile%"\AppData\Roaming\nom fichier" "dans le nouveau répertoire") que tu place en boucle pour lire un répertoire par exemple.

        mais utilise popd & pushd

        le code que je te fourni te montre l'utilisation, tes variables aussi dans la déclaration.

        ******************* pour la clé windows si je ne me trompe pas
        for /f "tokens=3,*" %%i in ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" ^|find "ProductId"') do (
        echo Num'ro version Windows : %%i
        )

        *************** EXEMPLE DE BAT

        ne lance pas le bat que je te laisse car chez moi j'avais fais le bat pour trier 130000 fichiers ou j'ai répertorié des clés correspondante à des signatures infectieuses, pour faire des essais, alors voilà. tu peux adapter..

        **********************************************************

        @echo off
        cls
        rem **********************************
        rem petit batch creer par Vulcain
        rem **********************************
        title batchvulcain
        @echo off
        setlocal EnableExtensions
        :menu
        rem défini la taille de la fenêtre cmd
        mode con cols=80 lines=50
        color f1
        echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
        echo º º
        echo º MENU GENERAL º
        echo º º
        echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
        echo.
        rem valide les accents
        MODE CON: CP SELECT=1252>nul
        rem corps du menu
        echo 1.Ouvrir fichier dans bloc note
        echo 2.Lecture registre User des softwares
        echo 3.Liste processus qui ne r'pondent pas
        echo 4.V'rifier une chaine dans fichier
        echo 5.Lire r'pertoire et r'pertori' dans fichier
        echo 6.Supprimer le fichier rapport g'n'r' par le batch
        echo 7.Imprimer le fichier Batch
        echo 8.Tri fichiers/r'pertoire suivant critSre
        echo 9.Quitter
        echo.
        color
        set /p reponse="Quel programme voulez-vous ex'cuter ?"

        If /i "%reponse%"=="1" goto :Openfichier
        If /i "%reponse%"=="2" goto :trouvecles
        If /i "%reponse%"=="3" goto :recherprocess
        If /i "%reponse%"=="4" goto :VerChaineFic
        If /i "%reponse%"=="5" goto :cptfictxt
        If /i "%reponse%"=="6" goto :supprimrapport
        If /i "%reponse%"=="7" goto :imprimrapport
        If /i "%reponse%"=="8" goto :TriFicChaineRep
        If /i "%reponse%"=="9" goto :fin
        rem Teste la saisie si incorrecte retour Menu
        if not defined reponse[%1] (
        cls
        goto :Menu
        )
        rem ============================================================================
        rem *************************************************Openfichier****** 1
        rem Ouvre et lit un fichier .txt
        :Openfichier
        cls
        setlocal
        set fichier=c:\RapportReg.txt
        rem test si fichier existe sous c:\
        if exist "%fichier%" (
        for /f "delims=" %%a in ('%fichier%') do echo %%a
        )
        cls
        Endlocal
        goto :menu
        rem ============================================================================
        rem ***************************************************trouvecles****** 2
        rem Lecture des programmes installes dans registre
        :trouvecles
        cls
        Setlocal
        rem net user Administrateur /active:no
        set rapport=RapportReg.txt
        set chemin="c:"
        rem delele du fichier rapport
        if exist "%chemin%\%rapport%" (
        del "%chemin%\%rapport%"
        )
        rem création du fichier rapport
        if not exist "%chemin%\%rapport%" (
        echo rapport diagnostique > "%chemin%\%rapport%"
        echo Liste des cles de registres des programmes installes >> "%chemin%\%rapport%"
        echo . ......... >> "%chemin%\%rapport%"
        )
        rem lit la clé et ajoute à chaque execution son contenu dans le fichier

        For /f "tokens=1" %%i in ('Reg Query HKEY_CURRENT_USER\Software\') do echo %%i >> "%chemin%\%rapport%"

        rem net user Administrateur /active:yes
        rem pause
        Endlocal
        goto :menu
        rem ============================================================================
        rem **************************************************recherprocess**** 3
        rem permettant de trouver les processus qui ne répondent pas
        :NonRepProcess
        setlocal
        cls
        tasklist /fi "status eq not responding"
        echo .
        rem tasklist /m (pour connaitre les Dll attachés)
        pause
        endlocal
        goto :menu
        rem ============================================================================
        rem ***************************************************VerChaineFic****** 4
        :VerChaineFic
        rem vérifie et extrait si la chaine Xaaaaa existe dans le texte
        cls
        setlocal
        set dossier=c:\DelfXa.txt
        set chaîne="Xaaaaa"
        for /f "tokens=*" %%z in ('type "%dossier%"^|findstr /C:"%chaîne%"') do (
        echo Nom de la chaine %%z
        )

        pause
        endlocal
        cls
        goto :menu
        rem ============================================================================
        rem *****************************************************cptfictxt****** 5
        :cptfictxt
        cls
        setlocal
        rem compte le nombre de fichier .txt dans c:\
        set count=0
        set nomfichier=c:\NomFichierTxt.txt

        rem place dans un fichier le nom de fichier.txt dans un fichier
        dir /O/N/B c:\*.txt > %nomfichier%
        rem compte le nombre de fichier txt
        for /f "tokens=*" %%i in ('type "%NomFichier%"') do set /a count+=1
        echo ....
        echo ....... vous avez %count% fichiers txt
        echo ....
        rem lit le fichier
        for /f "tokens=*" %%z in ('type "%NomFichier%"') do (
        rem c:\%%z
        echo .. %%z
        )
        pause
        endlocal
        goto :menu
        rem ============================================================================
        rem *************************************************supprimrapport****** 6
        :supprimrapport
        cls
        Setlocal
        set rapport=RapportReg.txt
        set chemin="c:"
        rem supprime le fichier rapport
        if exist "%chemin%\%rapport%" (
        del "%chemin%\%rapport%"
        echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
        echo º º
        echo º Fichier %chemin%\%rapport% supprim' º
        echo º º
        echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
        echo.
        )
        if not exist "%chemin%\%rapport%" (
        echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
        echo º º
        echo º Fichier d'j... supprim' º
        echo º º
        echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
        echo.
        )
        pause
        cls
        endlocal
        goto :menu
        rem ============================================================================
        Rem ************************************imprimrapport*************** 7
        :imprimrapport
        setlocal
        cls
        set /p reponse="Voulez-vous imprimer O/N : "
        echo .
        echo .
        If /i "%reponse%"=="O" goto :okimp
        If /i "%reponse%"=="N" goto :menu
        rem Teste la saisie si incorrecte retour Menu
        if not defined reponse[%1] (
        cls
        goto :Menu
        )

        :okimp
        set /p ficreponse="Entrer le nom du fichier "
        if /i "%ficreponse%"=="" (
        goto :okimp
        )

        set /p repertoire="Entrer le nom du r'pertoire c:\ par d'faut "
        if /i "%repertoire%"=="" (
        set repertoire=c:\
        )
        set ficimprimer=%repertoire%%ficreponse%
        echo %ficimprimer%

        echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
        echo º º
        echo º Impression en cours .......... º
        echo º º
        echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
        echo.
        if exist "%ficimprimer%" (
        print /D:USB002 %ficimprimer% >nul
        )

        pause
        endlocal
        goto :menu

        rem ============================================================================
        :TriFicChaineRep
        rem *********************************************************
        rem Lire repertoire, recupere fichier et si chaine dans
        rem fichier = Good, copie fichier dans repertoire Bon
        rem repertoire en dynamique %CD%
        rem ********************************************************* 8

        rem Déclaration variables
        @echo off
        cls
        setlocal ENABLEDELAYEDEXPANSION
        set count=0
        set NonTransfert=0
        set impostransfert=0
        set $recherche="good"
        set $recherche2="Douteux"
        set $recherche3="infection"
        set $recherche4="xxxx"
        set $recherche5="(???)"
        set $recherche6="Rogue"

        rem répertoire ou son les fichiers à trier
        set $RepLire=C:\Users\Thierry\xx\Fichiers répertoriés des infections
        rem Répertoire ou son les fichiers correcte
        set $CreatRepBon=C:\Users\Thierry\xx\Fichiers répertoriés des infections\bon
        rem répertoire ou son les fichiers douteux
        set $CreatRepDouteux=C:\Users\Thierry\xx\Fichiers répertoriés des infections\Douteux
        rem répertoire ou son les fichiers mauvais
        set $CreatRepMauvais=C:\Users\Thierry\xx\Fichiers répertoriés des infections\Mauvais
        rem répertoire ou son les fichiers inconnu
        set $CreatRepInconnu=C:\Users\Thierry\xx\Fichiers répertoriés des infections\Inconnu

        pushd "%$Replire%"&md "%$CreatRepBon%"&md "%$CreatRepMauvais%"&md "%$CreatRepDouteux%"&md "%$CreatRepInconnu%"
        rem Boucle lecture répertoire et appel recherche pour déplacement
        echo ******************** Transfert en cours ***********************************

        for %%a in (*.*) do (
        call :cherche %%a
        )

        popd
        cls
        echo ******************** Transfert effectu' ***********************************
        echo ******** Vous avez tranf'r' %count% fichier(s)
        echo ******** Vous avez %impostransfert% fichier(s) impossible ... transf'r'(s)
        echo ***************************************************************************
        endlocal
        pause
        goto :menu

        :cherche
        rem Lecture et recherche de la chaine de good
        find /C /I %$recherche% %1
        if !errorlevel!==1 (
        set /A NonTransfert+=1
        )
        rem teste si fichier existe, déplace fichier dans repertoire bon
        if !errorlevel!==0 (
        set /A count+=1
        if not exist "%$CreatRepBon%\%1" (move "%$Replire%\%1" "%$CreatRepBon%\%1")
        )

        rem ===========================================================================

        rem Lecture et recherche de la chaine de Douteux
        find /C /I %$recherche2% %1
        if !errorlevel!==1 (
        set /A NonTransfert+=1
        )

        rem teste si fichier existe, déplace fichier dans repertoire Douteux
        if !errorlevel!==0 (
        set /A count+=1
        if not exist "%$CreatRepDouteux%\%1" (move "%$Replire%\%1" "%$CreatRepDouteux%\%1")
        )

        rem ===========================================================================

        rem Lecture et recherche de la chaine de infection
        find /C /I %$recherche3% %1
        if !errorlevel!==1 (
        set /A NonTransfert+=1
        )
        echo %$CreatRepMauvais%\%1 %$Replire%\%1 %$CreatRepMauvais%\%1
        pause
        rem teste si fichier existe, déplace fichier dans repertoire Mauvais
        if !errorlevel!==0 (
        set /A count+=1
        if not exist "%$CreatRepMauvais%\%1" (move "%$Replire%\%1" "%$CreatRepMauvais%\%1")
        )

        rem ===========================================================================

        rem Lecture et recherche de la chaine de infection xxxx
        find /C /I %$recherche4% %1
        if !errorlevel!==1 (
        set /A NonTransfert+=1
        )
        rem teste si fichier existe, déplace fichier dans repertoire Mauvais
        if !errorlevel!==0 (
        set /A count+=1
        if not exist "%$CreatRepMauvais%\%1" (move "%$Replire%\%1" "%$CreatRepMauvais%\%1")
        )

        rem ===========================================================================

        rem Lecture et recherche de la chaine de infection inconnu
        find /C /I %$recherche5% %1
        if !errorlevel!==1 (
        set /A NonTransfert+=1
        )
        rem teste si fichier existe, déplace fichier dans repertoire Inconnu
        if !errorlevel!==0 (
        set /A count+=1
        if not exist "%$CreatRepInconnu%\%1" (move "%$Replire%\%1" "%$CreatRepInconnu%\%1")
        )

        rem ===========================================================================

        rem Lecture et recherche de la chaine (servant autre recherche) rogue
        find /C /I %$recherche6% %1
        if !errorlevel!==1 (
        set /A NonTransfert+=1
        )
        rem teste si fichier existe, déplace fichier dans repertoire mauvais
        if !errorlevel!==0 (
        set /A count+=1
        if not exist "%$CreatRepMauvais%\%1" (move "%$Replire%\%1" "%$CreatRepMauvais%\%1")
        )
        if NonTransfert NEQ 0 (
        set /A Nontransfert=0
        set /A impostransfert+=1
        )

        :end

        rem ******************************************************* FIN 9
        :fin
        color
        endlocal
        :eof
        1. merci de m'informer sur le sujet
          cordialement
        2. Merci pour ta réponse ça à très bien fonctionné

          Cordialement
        3. Super et à bientôt