IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Jour de la semaine dans un script


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Mars 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 1
    Par défaut Jour de la semaine dans un script
    Bonjour,

    Je m'interroge à savoir s'il est possible, dans un script batch, d'y inclure des jours de la semaine.

    Exemple : Je veux que chaque dimanche le script fasse QQCH...

    etc.. pour les autres jours de la semaine.

    Mais tout ça, dans un seul script. Est-ce possible ?

    Merci

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    948
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 948
    Par défaut
    Sinon, si ton cas s'y prete, il y a toujours la possibilité de faire des taches planifiées et de lancer des scripts différents chaque jour de la semaine, ca a le merite d'etre simple a faire.

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    En fait, avec les extensions de commande, tu ne peux hélas PAS déterminer comme ça le jour courant...

    Petite illustration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    @echo off
    setlocal enableextensions
    echo With extensions:
    REM Habituellement remplacé par "date /t", qui évite d'avoir à découper le résultat...
    echo. > __dummy__
    date < __dummy__ > __dummy2__
    type __dummy2__
    del /q __dummy__ __dummy2__ > NUL
    echo.
    endlocal
    
    setlocal disableextensions
    echo No extensions:
    echo. > __dummy__
    date < __dummy__ > __dummy2__
    type __dummy2__
    del /q __dummy__ __dummy2__ > NUL
    echo.
    endlocal
    Le résultat de la commande donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With extensions:
    La date du jour est : 03/03/2010
    Entrez la nouvelle date : (jj-mm-aa)
    
    No extensions:
    La date du jour est : mer. 03/03/2010
    Entrez la nouvelle date : (jj-mm-aa)
    Notez la partie en rouge.


    Donc, pour récupérer la date courante, tu peux tester ce batch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    @echo off
    setlocal enableextensions enabledelayedexpansion
    
    call :getcurrentday JOUR
    echo Nous sommes le jour !JOUR! de la semaine.
    goto :eof
    
    REM Paramètre %1 : ***NOM*** de la variable qui va recevoir le jour de la semaine.
    REM Retour : jour numérique de la semaine, Lundi=1, Mardi=2, ... Dimanche=7.
    :getcurrentday
    if @%1==@ (
    	echo :getcurrentday =^> missing parameter.
    	goto :eof
    )
    set gcd_tmp=__dummy__
    REM Bloc sans extensions de commandes.
    	setlocal disableextensions
    	echo. > %gcd_tmp%2
    	date < %gcd_tmp%2 > %gcd_tmp%
    	endlocal
    REM Filtrage du résultat.
    for /f "usebackq tokens=1,* delims=:" %%I in (`type %gcd_tmp% ^| find "%DATE%"`) do (
    	set gcd_date=%%J
    )
    del /q %gcd_tmp% %gcd_tmp%2 > NUL
    REM Découpe du jour de la semaine, on garde 3 lettres uniquement.
    for /f "usebackq tokens=1" %%I in (`echo %gcd_date%`) do (
    	set gcd_day=%%I
    	set gcd_day=!gcd_day:.=!
    	set gcd_day=!gcd_day:~0,3!
    )
    REM Analyse du jour (français/anglais).
    if /i !gcd_day! EQU lun set /a %1=1
    if /i !gcd_day! EQU mon set /a %1=1
    if /i !gcd_day! EQU mar set /a %1=2
    if /i !gcd_day! EQU tue set /a %1=2
    if /i !gcd_day! EQU mer set /a %1=3
    if /i !gcd_day! EQU wed set /a %1=3
    if /i !gcd_day! EQU jeu set /a %1=4
    if /i !gcd_day! EQU thu set /a %1=4
    if /i !gcd_day! EQU ven set /a %1=5
    if /i !gcd_day! EQU fri set /a %1=5
    if /i !gcd_day! EQU sam set /a %1=6
    if /i !gcd_day! EQU sat set /a %1=6
    if /i !gcd_day! EQU dim set /a %1=7
    if /i !gcd_day! EQU sun set /a %1=7
    set gcd_tmp=
    set gcd_date=
    set gcd_day=
    goto :eof
    Tu peux directement copier/coller le sous-programme ":getcurrentday" dans ton propre batch, et regarde l'exemple d'utilisation au début.
    Attention, il te FAUT ajouter le "setlocal" initial (ligne 2), tel quel, sinon cela ne marchera pas.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  5. #5
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    En fait, avec les extensions de commande, tu ne peux hélas PAS déterminer comme ça le jour courant...

    Petite illustration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    @echo off
    setlocal enableextensions
    echo With extensions:
    REM Habituellement remplacé par "date /t", qui évite d'avoir à découper le résultat...
    echo. > __dummy__
    date < __dummy__ > __dummy2__
    type __dummy2__
    del /q __dummy__ __dummy2__ > NUL
    echo.
    endlocal
    
    setlocal disableextensions
    echo No extensions:
    echo. > __dummy__
    date < __dummy__ > __dummy2__
    type __dummy2__
    del /q __dummy__ __dummy2__ > NUL
    echo.
    endlocal
    Le résultat de la commande donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With extensions:
    La date du jour est : 03/03/2010
    Entrez la nouvelle date : (jj-mm-aa)
    
    No extensions:
    La date du jour est : mer. 03/03/2010
    Entrez la nouvelle date : (jj-mm-aa)
    Notez la partie en rouge.


    Donc, pour récupérer la date courante, tu peux tester ce batch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    @echo off
    setlocal enableextensions enabledelayedexpansion
    
    call :getcurrentday JOUR
    echo Nous sommes le jour !JOUR! de la semaine.
    goto :eof
    
    REM Paramètre %1 : ***NOM*** de la variable qui va recevoir le jour de la semaine.
    REM Retour : jour numérique de la semaine, Lundi=1, Mardi=2, ... Dimanche=7.
    :getcurrentday
    if @%1==@ (
    	echo :getcurrentday =^> missing parameter.
    	goto :eof
    )
    set gcd_tmp=__dummy__
    REM Bloc sans extensions de commandes.
    	setlocal disableextensions
    	echo. > %gcd_tmp%2
    	date < %gcd_tmp%2 > %gcd_tmp%
    	endlocal
    REM Filtrage du résultat.
    for /f "usebackq tokens=1,* delims=:" %%I in (`type %gcd_tmp% ^| find "%DATE%"`) do (
    	set gcd_date=%%J
    )
    del /q %gcd_tmp% %gcd_tmp%2 > NUL
    REM Découpe du jour de la semaine, on garde 3 lettres uniquement.
    for /f "usebackq tokens=1" %%I in (`echo %gcd_date%`) do (
    	set gcd_day=%%I
    	set gcd_day=!gcd_day:.=!
    	set gcd_day=!gcd_day:~0,3!
    )
    REM Analyse du jour (français/anglais).
    if /i !gcd_day! EQU lun set /a %1=1
    if /i !gcd_day! EQU mon set /a %1=1
    if /i !gcd_day! EQU mar set /a %1=2
    if /i !gcd_day! EQU tue set /a %1=2
    if /i !gcd_day! EQU mer set /a %1=3
    if /i !gcd_day! EQU wed set /a %1=3
    if /i !gcd_day! EQU jeu set /a %1=4
    if /i !gcd_day! EQU thu set /a %1=4
    if /i !gcd_day! EQU ven set /a %1=5
    if /i !gcd_day! EQU fri set /a %1=5
    if /i !gcd_day! EQU sam set /a %1=6
    if /i !gcd_day! EQU sat set /a %1=6
    if /i !gcd_day! EQU dim set /a %1=7
    if /i !gcd_day! EQU sun set /a %1=7
    set gcd_tmp=
    set gcd_date=
    set gcd_day=
    goto :eof
    Tu peux directement copier/coller le sous-programme ":getcurrentday" dans ton propre batch, et regarde l'exemple d'utilisation au début.
    Attention, il te FAUT ajouter le "setlocal" initial (ligne 2), tel quel, sinon cela ne marchera pas.
    salut,


    très bonne astuce Mac LAK, ça permettera de ne plus utiliser des algo mathématiques ou passer par VBS

    tu peux la simplifier comme ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "tokens=2 delims=:." %%o in ('"<nul (cmd /e:off /cdate | find "/")"') do echo %%o

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par I'm_HERE Voir le message
    très bonne astuce Mac LAK, ça permettera de ne plus utiliser des algo mathématiques ou passer par VBS
    Merci. Et en plus, c'est une différence de comportement entre avec et sans extensions que je ne connaissais pas : je pensais que la seule différence de la commande date était le paramètre "/T".

    Citation Envoyé par I'm_HERE Voir le message
    tu peux la simplifier comme ceci:
    Effectivement, je n'avais pas pensé à utiliser un shell secondaire. J'en ai profité pour blinder un peu plus la commande (utilisation de %COMSPEC% et recherche par la date courante, ce qui renforcera une exécution correcte). J'en ai profité pour rajouter une gestion d'erreur primaire (cf. exemple), qui retournera la chaîne de trois lettres obtenue par découpage au lieu d'un code numérique en cas d'erreur (support des langues autres que français / anglais).

    Du coup, voilà le code simplifié correspondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    @echo off
    setlocal enableextensions enabledelayedexpansion
    
    call :getcurrentday JOUR
    if %ERRORLEVEL% EQU 0 (
    	echo Nous sommes le jour !JOUR! de la semaine.
    ) else (
    	echo Impossible d'obtenir le jour de la semaine ^(obtenu : !JOUR!^).
    )
    goto :eof
    
    REM Paramètre %1 : ***NOM*** de la variable qui va recevoir le jour de la semaine.
    REM Retour : jour numérique de la semaine, Lundi=1, Mardi=2, ... Dimanche=7.
    REM Si -1 : erreur de traitement.
    :getcurrentday
    if @%1==@ (
    	echo :getcurrentday =^> missing parameter.
    	goto :eof
    )
    for /f "usebackq tokens=2 delims=:." %%I in (`echo. ^| (%COMSPEC% /e:off /v:off /c date ^| find "%DATE%"^)`) do (
    	set gcd_day=%%I
    	set gcd_day=!gcd_day: =!
    )
    REM Analyse du jour (français/anglais).
    set /a %1=-1
    if /i !gcd_day! EQU lun set /a %1=1
    if /i !gcd_day! EQU mon set /a %1=1
    if /i !gcd_day! EQU mar set /a %1=2
    if /i !gcd_day! EQU tue set /a %1=2
    if /i !gcd_day! EQU mer set /a %1=3
    if /i !gcd_day! EQU wed set /a %1=3
    if /i !gcd_day! EQU jeu set /a %1=4
    if /i !gcd_day! EQU thu set /a %1=4
    if /i !gcd_day! EQU ven set /a %1=5
    if /i !gcd_day! EQU fri set /a %1=5
    if /i !gcd_day! EQU sam set /a %1=6
    if /i !gcd_day! EQU sat set /a %1=6
    if /i !gcd_day! EQU dim set /a %1=7
    if /i !gcd_day! EQU sun set /a %1=7
    if !%1! LEQ 0 (
    	set %1=!gcd_day!
    	set gcd_day=
    	exit /B 1
    )
    set gcd_day=
    exit /B 0
    goto :eof
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

Discussions similaires

  1. [MySQL] Script Php pour récupere n° de semaine dans une table
    Par frederic_dev dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/01/2011, 09h48
  2. Réponses: 8
    Dernier message: 05/12/2010, 15h37
  3. Réponses: 1
    Dernier message: 28/06/2009, 08h56
  4. trouver date du jour a partir du numero de la semaine dans l'année
    Par JAMINF dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 19/06/2008, 16h41
  5. Réponses: 14
    Dernier message: 30/12/2005, 19h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo