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 :

Problème Renommage / Impression / Copie automatique de pièces jointes


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 2
    Par défaut Problème Renommage / Impression / Copie automatique de pièces jointes
    Bonjour,

    J'ai un problème sur mon Batch, je récupère des pièces jointes de via un script python que je vient exploiter avec un fichier Batch.
    Les fichiers arrive dans le dossier "Scan" puis sont renommer si il y a un espace dans ce nom de fichier. Ensuite, ils sont imprimer automatiquement et copier sur un dossier de sauvegarde "CopyScan".
    Le problème est qu'il essaye d'imprimer avant même que le fichier soit renommer, dans la continuité, il renomme, copie et imprime bien les documents.

    Exemple :
    Si j'ai 2 documents "TEST 1.pdf" et "TEST 2.pdf" dans mon dossier "Scan"(2 documents avec des espaces), le script essayera d'imprimer TEST 1.pdf puis dira "Impossible d'imprimer ce fichier" et renommera ensuite les 2 fichiers pour les copier et les imprimer après.
    Au final j'aurai "TEST 1.pdf", "TEST1.pdf" et "TEST2.pdf" dans mon dossier de sauvegarde "CopyScan".

    On dirait que le script n'a pas le temps de renommer le fichier avant que celui-ci soit envoyé à l'impression.

    Quelqu'un aurait une solution pour le que le script renomme tout les fichiers puis les copies/imprime dans un second temps.

    Merci de votre aide.

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    @echo off
    
    REM ----------------------------------------------------------------------------------------------------------------------
    REM -----------------------------Impression PDF TEST---------------------------------------------------------------
    REM ----------------------------------------------------------------------------------------------------------------------
    
    	cd "D:\BD\Script\"
    	python test.py
    
    REM ----------------------------------Initiation des variables---------------------------------------------------------------
    
    	set SCAN="D:\BD\TEST\Scan\"
    	set SUMATRA="C:\Program Files\SumatraPDF\SumatraPDF.exe"
    	set IMPRIM="TEST"
    
    
    
    set "$chemin=D:\BD\TEST\Scan\"
     
    pushd "%$chemin%"
    
    for /f "delims=|" %%f in ('dir /b D:\BD\TEST\Scan\') do (
    for /f "delims=" %%a in ('dir /b /a-d') do call :cmd "%%a"
    
    
    :cmd
    set old=%~1
    set fichier=%old: =%
    ren "%old%" "%fichier%"
    
    )
    
    
    dir /b "D:\BD\TEST\Scan\*.pdf">D:\BD\TEST\Temp\edition_test.txt
    
    	for /f "delims=" %%A in (D:\BD\TEST\Temp\edition_test.txt) do (
    		 echo Impression du fichier :%%A
    
    REM ------------------------------Impression du fichier------------------------------------------------------------------------
    
    	
    	%SUMATRA%  -print-to  %IMPRIM% -exit-on-print D:\BD\TEST\Scan\%%A
    	copy "D:\BD\TEST\Scan\%%A" "D:\BD\CopyScan\%%A"
    
    REM ---------------------------Suppression du fichier dans le repertoire courant-------------------------------------------------
    
    	DEL D:\BD\TEST\Scan\%%A /Q
    )
    
    
    
    DEL D:\BD\TEST\Temp\edition_test.txt
    
    
    
    REM --------------------------Supprimer les fichiers de plus de 90 jours-------------------------------------------------
    
    forfiles /p "D:\BD\TEST\CopyScan" /s /m *.* /c "cmd /c Del @path" /d -90

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Met une pause avant :cmd, cela va t'aider à comprendre ce qui ne va pas je pense


  3. #3
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Salut !

    Tu dois comprendre ce que faît un "call" :

    lorsque tu fais un call :cmd l'interpreteur va executer le call et va revenir à la même ligne et continuer le script !

    Donc en fin d'éxecution des call dans ta boucle FOR tu dois terminer l'éxecution du code ! sinon il va continuer le script et entrar de nouveau
    dans ton label :cmd et foutre le b..... !

    pour terminer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for /f "delims=" %%a in ('dir /b /a-d') do call :cmd "%%a"
    
    exit /b
    
    
    :cmd
    Je pense que c'est ce que @ericlm128 veux que tu comprennes !


  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 2
    Par défaut
    Merci de votre aide,

    Je souhaite effectuer cette opération sur 2 imprimantes différentes, seulement si j'ai plusieurs fichiers dans le dossier "Scan" de TEST, il traite seulement les fichiers du dossier TEST et non ceux du dossier TEST2.

    Je boucle le renommage/imprimerie de mes fichiers dans le dossier TEST et lorsqu'il n'y a plus rien, j'essaye de passer a la partie TEST2, malheureusement il vient juste traiter la première partie puis il quitte le programme.

    Il y a un problème dans ma vérification du dossier vide :

    for /r "D:\BD\TEST\Scan\" %%i in (*.*) do set VrTest=%%i
    if "%VrTest%"=="" GOTO START2

    Voici le code actuel :

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    @echo off
    
    REM ----------------------------------------------------------------------------------------------------------------------
    REM -----------------------------Impression PDF TEST---------------------------------------------------------------
    REM ----------------------------------------------------------------------------------------------------------------------
    	
    	cd "D:\BD\Script\"
    	python test.py
    
    REM ----------------------------------Initiation des variables---------------------------------------------------------------
    
    	set SUMATRA="C:\Program Files\SumatraPDF\SumatraPDF.exe"
    	set IMPRIM="TEST"
    
    :START
    
    for /r "D:\BD\TEST\Scan\" %%i in (*.*) do set VrTest=%%i
    if "%VrTest%"=="" GOTO START2
    
    set "$chemin=D:\BD\TEST\Scan\"
     
    
    pushd "%$chemin%"
    
    for /f "delims=|" %%f in ('dir /b D:\BD\TEST\Scan\') do (
    for /f "delims=" %%a in ('dir /b /a-d') do call :cmd "%%a"
    
    exit /b
    
    :cmd
    set old=%~1
    set fichier=%old: =%
    ren "%old%" "%fichier%"
    
    
    dir /b "%fichier%">D:\BD\TEST\Temp\edition_test.txt
    
    	for /f "delims=" %%A in (D:\BD\TEST\Temp\edition_test.txt) do (
    		 echo Impression du fichier :%%A
    
    REM ------------------------------Impression du fichier------------------------------------------------------------------------
    
    
    	%SUMATRA%  -print-to  %IMPRIM% -exit-on-print D:\BD\TEST\Scan\%%A
    	copy "D:\BD\TEST\Scan\%%A" "D:\BD\TEST\CopyScan\%%A"
    
    REM ---------------------------Suppression du fichier dans le repertoire courant-------------------------------------------------
    
    	DEL D:\BD\TEST\Scan\%%A /Q
    
    )
    
    if exist "D:\BD\TEST\Temp\edition_test.txt" (
    DEL D:\BD\TEST\Temp\edition_test.txt
    )
    
    
    REM --------------------------Supprimer les fichiers de plus de 90 jours-------------------------------------------------
    
    forfiles /p "D:\BD\TEST\CopyScan" /s /m *.* /c "cmd /c Del @path" /d -90
    
    
    GOTO :START
    
    
    REM ----------------------------------------------------------------------------------------------------------------------
    REM -----------------------------Impression PDF TEST2---------------------------------------------------------------
    REM ----------------------------------------------------------------------------------------------------------------------
    	
    	cd "D:\BD\Script\"
    	python test2.py
    
    REM ----------------------------------Initiation des variables---------------------------------------------------------------
    
    	set SUMATRA="C:\Program Files\SumatraPDF\SumatraPDF.exe"
    	set IMPRIM2="TEST2"
    
    :START2
    
    for /r "D:\BD\TEST2\Scan\" %%i in (*.*) do set VrTest=%%i
    if "%VrTest%"=="" exit
    
    set "$chemin=D:\BD\TEST2\Scan\"
     
    
    pushd "%$chemin%"
    
    for /f "delims=|" %%f in ('dir /b D:\BD\TEST2\Scan\') do (
    for /f "delims=" %%a in ('dir /b /a-d') do call :cmd2 "%%a"
    
    exit /b
    
    :cmd2
    set old1=%~1
    set fichier1=%old1: =%
    ren "%old1%" "%fichier1%"
    
    
    dir /b "%fichier1%">D:\BD\TEST2\Temp\edition_test2.txt
    
    	for /f "delims=" %%A in (D:\BD\TEST2\Temp\edition_test2.txt) do (
    		 echo Impression du fichier :%%A
    
    REM ------------------------------Impression du fichier------------------------------------------------------------------------
    
    
    	%SUMATRA%  -print-to  %IMPRIM2% -exit-on-print D:\BD\TEST2\Scan\%%A
    	copy "D:\BD\TEST2\Scan\%%A" "D:\BD\TEST2\CopyScan\%%A"
    
    REM ---------------------------Suppression du fichier dans le repertoire courant-------------------------------------------------
    
    	DEL D:\BD\TEST2\Scan\%%A /Q
    
    )
    
    if exist "D:\BD\TEST2\Temp\edition_test2.txt" (
    DEL D:\BD\TEST2\Temp\edition_test2.txt
    )
    
    
    REM --------------------------Supprimer les fichiers de plus de 90 jours-------------------------------------------------
    
    forfiles /p "D:\BD\TEST2\CopyScan" /s /m *.* /c "cmd /c Del @path" /d -90
    
    
    GOTO :START2
    Merci de votre aide.

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 549
    Par défaut
    Bonjour,

    La vérification du dossier vide est un faux problème, il y a d'autres choses plus importantes qui ne vont pas.

    Comme dit plus haut, les différentes parties (programme principal, fonctions) sont mal délimitées/ordonnées. Pour terminer une fonction on utilise GOTO :EOF ou bien EXIT, toi tu sautes vers un autre label (GOTO :START)

    Tu utilises des FOR qui ne servent à rien ou bien qui font double usage.

    Au lieu de répéter ton code pour la deuxième imprimante, tu peux faire une fonction, voilà ce que ça donnerait :

    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
    @echo off
    setlocal enableextensions enabledelayedexpansion
    
    set SUMATRA="C:\Program Files\SumatraPDF\SumatraPDF.exe"
    
    call :impression TEST
    call :impression TEST2
    
    exit /b 0
    
    
    :impression
    
    REM ----------------------------------------------------------------------------------------------------------------------
    REM -----------------------------Impression PDF TEST---------------------------------------------------------------
    REM ----------------------------------------------------------------------------------------------------------------------
    	
    cd /d D:\BD\Script
    python %1.py
    
    set $chemin=D:\BD\%1\Scan
    cd !$chemin!
    
    for /f "delims=" %%a in ('2^>nul dir /b /a-d') do (
    
    	set "old=%%~a"
    	set fichier=!old: =!
    	ren "!old!" "!fichier!"
    
    	echo Impression du fichier : !fichier!
    
    
    REM ------------------------------Impression du fichier------------------------------------------------------------------------
    
    	%SUMATRA% -print-to "%1" -exit-on-print !$chemin!\!fichier!
    	copy /V "!$chemin!\!fichier!" "D:\BD\%1\CopyScan\!fichier!"
    
    
    REM ---------------------------Suppression du fichier dans le repertoire courant-------------------------------------------------
    
    	DEL "!$chemin!\!fichier!" /Q
    )
    
    
    REM --------------------------Supprimer les fichiers de plus de 90 jours-------------------------------------------------
    
    forfiles /p "D:\BD\%1\CopyScan" /s /m *.* /c "cmd /c Del @path" /d -90
    
    GOTO :EOF
    Tiens-moi au courant si ça te convient, je suis très intéressé par ton script Python, cela pourrait me servir.

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/02/2009, 10h33
  2. Enregistrement automatique de pièces jointes
    Par alain_godard dans le forum VBA Outlook
    Réponses: 4
    Dernier message: 31/03/2008, 05h50
  3. [RegEx] [Formulaire]= problème d'envoi de formulaire avec pièces jointes
    Par lyamarin dans le forum Langage
    Réponses: 22
    Dernier message: 03/04/2007, 13h29
  4. [Mail] Problème d'envoi de mail avec pièces jointes
    Par nelly644 dans le forum Langage
    Réponses: 2
    Dernier message: 31/03/2007, 10h14
  5. [phpmailer]Copie cachée en pièce jointe ?
    Par elitemedia dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 25/11/2006, 21h50

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