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 :

test de la présence de fichiers ou de répertoires dans un répertoire racine.


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 34
    Par défaut test de la présence de fichiers ou de répertoires dans un répertoire racine.
    Bonjour,
    Je commence en batch, et je galère depuis 2 jours pour en créer un!

    Je me retrouve bloqué sur le test de la présence de fichiers ou de répertoires dans un répertoire "xx"
    En effet, je voudrais vérifier toute les 10mn par une tache planifiée si il y a des fichiers et/ou répertoires, dans le répertoire "xx". Et si il y a quelque chose à déplacer (fichiers ou répertoires) je veut envoyer un mail avec le soft "sendmail" et lancer la commande de déplacement de fichiers.
    Par contre, je ne veut pas envoyer un mail si il n'y a rien à déplacer dans "xx".

    J'ai essayé ça sans succès:

    Set Source=e:\ftp\xx
    Set Destination=e:\ftp\yy
    If existe %source%\*.* (
    For /F "Tokens=* Delims=" %%I In ('Dir /B "%_Source%"') Do Move "%_Source%\%%I" "%_Destination%"
    sendmail.exe.....
    ) else (
    exit
    )

    Évidement je ne connait pas les noms des fichiers ou répertoires qui peuvent être présent dans "xx"

    Seul le test de la présence de fichier ou de répertoires dans e:\ftp\xx" semble ne pas fonctionner.

    Merci d'avance pour votre aide!

  2. #2
    Membre chevronné

    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2003
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 333
    Billets dans le blog
    1
    Par défaut
    A mon avis il manque des " autour de ton nom de fichier et je ne suis pas sûr que les meta-caractères marchent. Personnellement, je ferai un dir /b du répertoire, puis j'en compterai le nombre de ligne pour savoir si un nouveau fichier est apparu.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 34
    Par défaut
    effectivement, j'ai quasiment réussit à faire ce que je voulais en comptant les fichiers.

    Plus que 2 problèmes:
    Si un répertoire dans %destination% porte le même nom que que dans %source% alors il ne veut pas déplacer le répertoire dans %source% et m'affiche: accès refusé.
    Pourtant, j'ai bien ajouté l'option /Y pour la commande move.

    Ensuite, il n'y a plus que l'ajout des noms des fichiers dans le corps de mon message qui ne fonctionne pas! pourtant j'y été arrivé pendant un moment....

    J'utilise un 1er batch qui appel un second batch "move.bat":

    Set Source=e:\ftp\xx
    Set Destination=e:\ftp\yy
    For /f "tokens=*" %%a in ('dir /B "%Source%\"') Do Set /A Compte+=1
    If "%Compte%"=="" (
    goto FIN2
    ) else (
    call move.bat
    )

    :MAIL
    rem Parametres de l'email à envoyer pour sendmail
    set sujet=De nouveaux PV sont arrivés sur le FTP!
    set exp=xxxxxx
    set destinataire=xxxxxxxx
    set corps=corps.txt
    set port=25
    set smtp=xxx.xxx.xxx.xxx
    sendmail.exe /m:%corps% /u:%destinataire% /t:%sujet% /e:%exp% /l /p:%port% /s:%smtp%

    :FIN
    --------------------------------------------------------

    Fichier batch "move.bat":
    ------------------------
    Set Source=e:\ftp\xx
    Set Destination=e:\ftp\yy
    del %destination%\corps.txt
    title >%destination%\corps.txt
    for /f "Tokens=4* delims=\" %%a in ('dir %Source%\ /B') do echo %%a>>%destination%\corps.txt
    Set DD=%date:~0,2%
    Set MM=%date:~3,2%
    Set YY=%date:~6,4%
    echo "date du jour: %DD%-%MM%-%YY%"
    mkdir "%Destination%\%YY%\%MM%\%DD%\"
    For /F "Tokens=* Delims=" %%i In ('Dir /B "%Source%"') Do Move /y "%Source%\%%i" "%Destination%\%YY%\%MM%\%DD%\"

  4. #4
    Membre chevronné

    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2003
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 333
    Billets dans le blog
    1
    Par défaut
    Pour ton problème avec move, c'est inhérent à la commande on dirait (j'ai reproduis). Utilise l'equivalent unix, mv.exe.

    sur cette ligne, 2 vulnérabilité : echo %%a>>%destination%\corps.txt

    1. Pas de guillement dans le nom de fichier.
    2. si %%a se termine par un chiffre se sera intéprété comme étant une sortie (1> c'est le stdout, 1, le stderr,...)

    Peut être es tu dans l'un de ces 2 cas ?

  5. #5
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 34
    Par défaut
    je comprends pas ce que tu veut me dire par:

    1. Pas de guillemets dans le nom de fichier.
    2. si %%a se termine par un chiffre se sera interprété comme étant une sortie (1> c'est le stdout, 1, le stderr,...)

    dans mes test, il n'y a pas de chiffre à la fin, ni de guillemets pour la variable %%a. Mais il pourrait arriver qu'il y ai un chiffre à la fin un jour...

    Comment corriger?

    J'ai du mal à comprendre quand il faut mettre des ' ou des "

  6. #6
    Membre chevronné

    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2003
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 333
    Billets dans le blog
    1
    Par défaut
    En fait, batch est vulnérable au espace dans le nom de fichier, donc chaque nom de fichier doit être entouré de guillemets.

    Aprés si tu as des erreurs, il faut faire du debug en analysant la sortie des paramètres des commandes qui foirent, avec de simple echo P1 [%parametre1%]...

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/06/2015, 10h21
  2. Réponses: 2
    Dernier message: 08/07/2012, 22h07
  3. Réponses: 38
    Dernier message: 26/09/2008, 17h46
  4. Réponses: 3
    Dernier message: 04/07/2008, 11h07
  5. Réponses: 2
    Dernier message: 12/03/2006, 23h41

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