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 :

Comment compresser un certains nombre de fichier défnis pour controler le nombre


Sujet :

Scripts/Batch

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 161
    Points : 44
    Points
    44
    Par défaut Comment compresser un certains nombre de fichier défnis pour controler le nombre
    Bonjour

    Je voudrais savoi comment faire pour compresser un nombre de fichiers défini en batch Windows (ou powerShell) car aujourdhui mon programme batch prend tous les fichiers d'un dossier et créér un zip mais le probleme est que des fois il peut y avoir beaucoup trop de fichiers dans le zip crééé et cela pose probleme par la suite.

    Du coup je dois limiter les zip à 30 fichiers max et je ne vois pas comment mettre en place ce type de compteur pendant mon traitement.

    voilà mon programme ci dessous avc bout de code en gras ou je fais le zip:

    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
    @echo off
    
    powershell -Command "get-childItem D:\CFT\Tempus\Upload\BPM_Prod\SCAN_FRA\*.eml | rename-item -newname { $_.name -replace '!','' }"
    
    setlocal EnableDelayedExpansion
    
    Rem ---- définition des variables---
    
    	set currentpath=%~dp0
    	set logdir=%currentpath%log\%date:~6,4%%date:~3,2%%date:~0,2%
    	REM set logfile=%logdir%\scan_fra_%date:~6,4%%date:~3,2%%date:~0,2%_%time:~0,2%h%time:~3,2%%time:~6,2%.log
    	set /p LotNum=<%currentpath%\conf\lot.conf
    	set LotNum=!LotNum: =!
    	set logfile=%logdir%\ScanFra_%date:~6,4%%date:~3,2%%date:~0,2%_LOT_%LotNum%.log
    	set /a LotNumNext=%LotNum%+1
    	set NN=0
    	set Length=0
    
    echo lot num = %LotNum%
    echo lot suivant = %LotNumNext%
    echo %logfile%
    
    set hour=%time:~0,2%
    set min=%time:~3,2%
    set horodatage=%date:~6,4%%date:~3,2%%date:~0,2%T%hour%%min%
    set horodatage=!horodatage: =!
    
    	set repWork=D:\CFT\Tempus\Upload\BPM_Prod\WORK_FRA\
    	set repScan=D:\CFT\Tempus\Upload\BPM_Prod\SCAN_FRA\
    	set repArch=D:\CFT\Tempus\Upload\BPM_Prod\ARCHIVE\
    	set repRejet=D:\CFT\Tempus\Upload\BPM_Prod\REJET\
    	
    Rem echo %horodatage%
    Rem echo %zipfile%
    Rem echo %hour%
    Rem echo %min%
    Rem echo total %hour%%min%
    Rem echo %dt%
    
    Rem ------------------------
    
    REM ---- Fonction pour compléter le numéro de lot avec des 0 devant pour respecter la taille de String 8 ----
    set #=%LotNum%
    :loop
    if defined # (
        set #=%#:~1%
        set /A Length += 1
        goto loop
    )
    
    
    if %Length% LSS 8 goto less_8
     
    :less_8
    set /a t=(8-%Length%)
     echo T =%t%
    set LotNumZeros=0
    for /l %%i in (2,1,%t%) do call set "LotNumZeros=%%LotNumZeros%%%LotNumZeros%"
    set FinalLotNum=%LotNumZeros%%LotNum%
    
    REM -----------fin bloc de fonction -------
    
    REM ---- Définiton du nom du zip en sortie -----------
    
    	set EXT=7z
    	set zipfile=BNPPLS_FRA_2_%horodatage%_%FinalLotNum%.%EXT%
    	set zipfile=!zipfile: =!
    
    REM ------- fin définition du nom de zip -----
    
    
    Rem ----Debut programme -------
    
    if not exist %logdir% (mkdir %logdir%)
    
    if not exist %repScan%*.eml GOTO :LOGS
    
    del /Q %repWork%\* >> %logfile%
    
    cd %repScan% >> %logfile%
    
    Move *.eml*  %repWork% >> %logfile%
    Move *.* %repRejet% >> %logfile%
    
    cd %RepWork% >> %logfile%
    
    REM ---
    
    FOR %%I IN (*.*) DO call :INCREM "%%I" >> %logfile%
    
    Rem "C:\Program Files\WinZip\Winzip8.1_FR\WINZIP32.exe" -a %repWork%%zipfile% %repWork%\*.* >> %logfile%
    
    "C:\Program Files\7-Zip\7z.exe" a %repWork%%zipfile% %repWork%\* >> %logfile%
    
    ....

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Bonjour,

    Ca devrait donner quelque chose dans ce genre là :

    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
    cd %RepWork% >> %logfile%
    
    REM ---
    
    setlocal enabledelayedexpansion
    
    set count=0
    set num=0
    
    FOR %%I IN (*.*) DO (
    
    	set /a count+=1
    	ren "%%~I" "###%%~I"
    
    	if !count! EQU 30 (
    		set count=0
    		set /a num+=1
    		"C:\Program Files\7-Zip\7z.exe" a %repWork%%zipfile%_!num! %repWork%\###* >> %logfile%
    		del /f /q "###*"
    	)
    )
    
    ....

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 161
    Points : 44
    Points
    44
    Par défaut Comment compresser un certains nombre de fichier défnis pour controler le nombre
    Hello Barnabe !

    Merci déjà pour ta réponse rapide.

    J'ai tenté d'intégrer ton bout de code dans mon script directement mais je n'ai pas obtenu le resultat attendu.
    Du coup je l ai isolé dans un .bat pour le tester en local chez moi: j'ai déposé plusieurs fichiers dans un dossier et j'ai executer le contenu du bat ci-dessous

    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
    setlocal enabledelayedexpansion
    
    set count=0
    set num=0
    
    cd C:\C\GED\SCRIPT_GED\SCAN_GBR
    
    
    FOR %%I IN (*.*) DO (
    
    	set /a count+=1
    	ren "%%~I" "###%%~I"
    
    	if !count! EQU 30 (
    		set count=0
    		set /a num+=1
    		"C:\Program Files\7-Zip\7-Zip 4.23\7z.exe" a C:\C\GED\SCRIPT_GED\SCAN_GBR\30.7z C:\C\GED\SCRIPT_GED\SCAN_GBR\###*
    		rem del /f /q "###*"
    	)
    )
    La seul qui est faite c est le renomage des fichiers avec les 3 "###" devant:

    Nom : resultat_script.JPG
Affichages : 1310
Taille : 36,7 KoNom : resultat_script.JPG
Affichages : 1310
Taille : 36,7 Ko

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Vraiment désolé, j'ai pondu ce code en 5 min sans même le tester.

    Maintenant que tu m'as répondu, ce qui n'est pas le cas de tout le monde, je me dois de fournir quelque chose de correct :

    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
    @echo off
    setlocal enableextensions enabledelayedexpansion
    
    set RepWork=%USERPROFILE%\Mes images\Nature\Fleurs
    set zipfile=archive
    
    cd /d %RepWork%
    
    set count=0
    set num=0
    
    if not exist "###" (mkdir "###")
    
    FOR %%I IN (*.eml) DO (
    
    	set /a count+=1
    	>nul move "%%~I" "###"
    	if !count! EQU 30 (call:archive)
    
    )
    call:archive
    rmdir /s /q "###"
    
    pause
    exit /b 0
    
    :archive
    pushd "###"
    
    set count=0
    set /a num+=1
    set index=00!num!
    set index=!index:~-3!
    
    "C:\Program Files\7-Zip\7z.exe" a "%zipfile%_!index!" "*.eml"
    
    >nul move "%zipfile%_!index!.7z" ".."
    del /f /q "*.*"
    
    popd
    goto :eof
    Je te laisse le soin d'intégrer cela dans ton code, tiens-moi au courant.

    ps : tu peux virer les 2 premiers SET, ils m'ont servi pour mes tests

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 161
    Points : 44
    Points
    44
    Par défaut
    Hello Barnabe, encore merci enormement pour ton aide.

    Alors j'ai intégré ton nouveau code dans mon script mais ca continue a prendre tous les fichiers du dossier sans limiter à 30

    voilà ton code intégré dans mon script ( pour info j'ai commenté tes partie ou tu faisais des suppressions pour eviter tout probleme comme je ne maitrise pas ton code)

    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
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    @echo off
    
    powershell -Command "get-childItem D:\CFT\Tempus\Upload\BPM_UAT\SCAN_FRA\*.eml | rename-item -newname { $_.name -replace '!','' }"
    
    setlocal EnableDelayedExpansion
    
    Rem ---- définition des variables---
    
    	set currentpath=%~dp0
    	set logdir=%currentpath%log\%date:~6,4%%date:~3,2%%date:~0,2%
    	REM set logfile=%logdir%\scan_fra_%date:~6,4%%date:~3,2%%date:~0,2%_%time:~0,2%h%time:~3,2%%time:~6,2%.log
    	set /p LotNum=<%currentpath%\conf\lot.conf
    	set LotNum=!LotNum: =!
    	set logfile=%logdir%\ScanFra_%date:~6,4%%date:~3,2%%date:~0,2%_LOT_%LotNum%.log
    	set /a LotNumNext=%LotNum%+1
    	set NN=0
    	set Length=0
    
    echo lot num = %LotNum%
    echo lot suivant = %LotNumNext%
    echo %logfile%
    
    set hour=%time:~0,2%
    set min=%time:~3,2%
    set horodatage=%date:~6,4%%date:~3,2%%date:~0,2%T%hour%%min%
    set horodatage=!horodatage: =!
    
    	set repWork=D:\CFT\Tempus\Upload\BPM_UAT\WORK_FRA\
    	set repScan=D:\CFT\Tempus\Upload\BPM_UAT\SCAN_FRA\
    	set repArch=D:\CFT\Tempus\Upload\BPM_UAT\ARCHIVE\
    	set repRejet=D:\CFT\Tempus\Upload\BPM_UAT\REJET\
    	
    Rem echo %horodatage%
    Rem echo %zipfile%
    Rem echo %hour%
    Rem echo %min%
    Rem echo total %hour%%min%
    Rem echo %dt%
    
    Rem ------------------------
    
    REM ---- Fonction pour compléter le numéro de lot avec des 0 devant pour respecter la taille de String 8 ----
    set #=%LotNum%
    :loop
    if defined # (
        set #=%#:~1%
        set /A Length += 1
        goto loop
    )
    
    
    if %Length% LSS 8 goto less_8
     
    :less_8
    set /a t=(8-%Length%)
     echo T =%t%
    set LotNumZeros=0
    for /l %%i in (2,1,%t%) do call set "LotNumZeros=%%LotNumZeros%%%LotNumZeros%"
    set FinalLotNum=%LotNumZeros%%LotNum%
    
    REM -----------fin bloc de fonction -------
    
    REM ---- Définiton du nom du zip en sortie -----------
    
    	set EXT=7z
    	set zipfile=BNPPLS_FRA_2_%horodatage%_%FinalLotNum%.%EXT%
    	set zipfile=!zipfile: =!
    
    REM ------- fin définition du nom de zip -----
    
    
    Rem ----Debut programme -------
    
    if not exist %logdir% (mkdir %logdir%)
    
    if not exist %repScan%*.eml GOTO :LOGS
    
    del /Q %repWork%\* >> %logfile%
    
    cd %repScan% >> %logfile%
    
    
    Move *.eml*  %repWork% >> %logfile%
    Move *.* %repRejet% >> %logfile%
    cd %RepWork% >> %logfile%
    
    REM ---
    
    FOR %%I IN (*.*) DO call :INCREM "%%I" >> %logfile%
    
    Rem "C:\Program Files\WinZip\Winzip8.1_FR\WINZIP32.exe" -a %repWork%%zipfile% %repWork%\*.* >> %logfile%
    
    Rem ----------------------limite 30 fichiers ---------------------------------------------
    
    
    REM cd /d %RepWork%
    
    set count=0
    set num=0
    
    REM if not exist "###" (mkdir "###")
    
    FOR %%I IN (*.eml) DO (
    
    	set /a count+=1
    	>nul move "%%~I" "###"
    	if !count! EQU 30 (call:archive)
    
    )
    call:archive
    REM rmdir /s /q "###"
    
    pause
    exit /b 0
    
    :archive
    pushd "###"
    
    set count=0
    set /a num+=1
    set index=00!num!
    set index=!index:~-3!
    
    "C:\Program Files\7-Zip\7z.exe" a "%zipfile%_!index!" "*.eml"
    
    >nul move "%zipfile%_!index!.7z" ".."
    
    REM del /f /q "*.*"
    
    popd
    goto :eof
    
    Rem -----------------------------------------------------------------------------------------
    
    REM ------ Suppression fichiers après compression -----
    
    for /f "delims=" %%f in ('dir /b') do  if not %%~xf == .%EXT% del %%f >> %logfile%
    
    Rem --- incrémentation du numéro de lot -----
    
    echo %LotNumNext% >%currentpath%\conf\lot.conf
    
    Rem -------copie dans un dossier archive ----------------
    
    copy %repWork%%zipfile% %repArch% >> %logfile%
    
    
    Rem ------------------------------------------------------
    
    Rem ----- Envoi CFT -----------
    set part=AUTOMATU
    set idf=WWDDIDEM
    set env=U
    
    Rem D:\APPS\CFTG\scripts\cftxsend.bat -D "%part%" -I "%idf%" -F "%chemin%+%fichier%" -P "%env%_%fichier%" –O “RUSER=CANON01M,SUSER=10000000,SAPPL=0x515E7A98”
    
    REM D:\APPS\CFTG\scripts\cftxsend.bat -D "%part%" -I "%idf%" -F "%repWork%%zipfile%" -P "%env%_%zipfile%"
    
    REM D:\APPS\CFTG\scripts\cftxsend.bat -D "AUTOMATQ" -I "WWDDIDEM" -F "%repWork%%zipfile%" -P "Q_%zipfile%"
    
    REM D:\APPS\CFTG\scripts\cftxsend.bat -D "AUTOMATU" -I "WWDDIDEM" -F "%repWork%%zipfile%" -P "U_%zipfile%"
    
    Rem ----- fin envoi CFT -------
    
    
    Rem --- fonction de renommage des fichiers -------
    
    
    
    :INCREM
    rename %1 "BNPPLS_FRA_2_%horodatage%_%FinalLotNum%_0000%NN%.eml"
    set /A NN=NN+1
    rem GOTO: EOF
    Rem ----- fin Fonction Renommage ----
    
    
    :LOGS
    echo Pas de fichier à traiter: dossier Scan vide ! > %logfile%
    
    rem :EOF
    rem exit
    RESULTAT:

    Nom : resultat_script.JPG
Affichages : 1121
Taille : 194,4 Ko

    LOG:

    Nom : logs.jpg
Affichages : 1043
Taille : 85,2 Ko

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    On va finir par y arriver, j'ai intégré mon code dans le tien, essaie-moi ça :

    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
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    @echo off
    setlocal enableextensions enabledelayedexpansion
    chcp 1252 >nul
    
    
    ::powershell -Command "get-childItem D:\CFT\Tempus\Upload\BPM_Prod\SCAN_FRA\*.eml | rename-item -newname { $_.name -replace '!','' }"
    
    Rem ---- définition des variables---
    
    	set currentpath=%~dp0
    	set logdir=%currentpath%log\%date:~6,4%%date:~3,2%%date:~0,2%
    ::	set /p LotNum=<%currentpath%\conf\lot.conf
    ::	set LotNum=!LotNum: =!
    set LotNum=515
    	set logfile=%logdir%\ScanFra_%date:~6,4%%date:~3,2%%date:~0,2%_LOT_%LotNum%.log
    	set /a LotNumNext=!LotNum!+1
    	set NN=0
    	set Length=0
    
    echo lot num = %LotNum%
    echo lot suivant = %LotNumNext%
    echo %logfile%
    
    set hour=%time:~0,2%
    set min=%time:~3,2%
    set horodatage=%date:~6,4%%date:~3,2%%date:~0,2%T%hour%%min%
    set horodatage=!horodatage: =!
    
    	set repWork=D:\CFT\Tempus\Upload\BPM_Prod\WORK_FRA\
    	set repScan=D:\CFT\Tempus\Upload\BPM_Prod\SCAN_FRA\
    	set repArch=D:\CFT\Tempus\Upload\BPM_Prod\ARCHIVE\
    	set repRejet=D:\CFT\Tempus\Upload\BPM_Prod\REJET\
    	
    
    Rem ------------------------
    
    REM ---- Fonction pour compléter le numéro de lot avec des 0 devant pour respecter la taille de String 8 ----
    
    set FinalLotNum=00000000!LotNum!
    set FinalLotNum=!FinalLotNum:~-8!
    
    REM -----------fin bloc de fonction -------
    
    REM ---- Définiton du nom du zip en sortie -----------
    
    	set ext=eml
    	set zipfile=BNPPLS_FRA_2_!horodatage!_!FinalLotNum!
    	set zipfile=!zipfile: =!
    
    REM ------- fin définition du nom de zip -----
    
    
    Rem ----Debut programme -------
    
    if not exist "%logdir%" (mkdir "%logdir%")
    :: if not exist "%repScan%*.%ext%" (GOTO :LOGS)
    
    del /q "%repWork%*.*" >> %logfile%
    
    cd /d %repScan% >> %logfile%
    
    move "*.%ext%" "%repWork%" >> %logfile%
    move /y "*.*" "%repRejet%" >> %logfile%
    
    cd %repWork% >> %logfile%
    
    REM ---
    
    set count=0
    set num=0
    
    if not exist "###" (mkdir "###")
    
    FOR %%I IN (*.%ext%) DO (
    
    	set /a count+=1
    	>nul move "%%~I" "###"
    	if !count! EQU 30 (call:archive)
    
    )
    call:archive
    rmdir /s /q "###"
    
    Rem -----------------------------------------------------------------------------------------
    
    REM ------ Suppression fichiers après compression -----
    
    for /f "delims=" %%f in ('dir /b') do  (if not %%~xf == .%ext% (del %%f >> %logfile%))
    
    Rem --- incrémentation du numéro de lot -----
    
    echo %LotNumNext% >%currentpath%\conf\lot.conf
    
    Rem -------copie dans un dossier archive ----------------
    
    copy %repWork%%zipfile% %repArch% >> %logfile%
    
    
    Rem ------------------------------------------------------
    
    Rem ----- Envoi CFT -----------
    set part=AUTOMATU
    set idf=WWDDIDEM
    set env=U
    
    Rem D:\APPS\CFTG\scripts\cftxsend.bat -D "%part%" -I "%idf%" -F "%chemin%+%fichier%" -P "%env%_%fichier%" –O “RUSER=CANON01M,SUSER=10000000,SAPPL=0x515E7A98”
    
    REM D:\APPS\CFTG\scripts\cftxsend.bat -D "%part%" -I "%idf%" -F "%repWork%%zipfile%" -P "%env%_%zipfile%"
    
    REM D:\APPS\CFTG\scripts\cftxsend.bat -D "AUTOMATQ" -I "WWDDIDEM" -F "%repWork%%zipfile%" -P "Q_%zipfile%"
    
    REM D:\APPS\CFTG\scripts\cftxsend.bat -D "AUTOMATU" -I "WWDDIDEM" -F "%repWork%%zipfile%" -P "U_%zipfile%"
    
    Rem ----- fin envoi CFT -------
    
    
    Rem --- fonction de renommage des fichiers -------
    
    
    
    :INCREM
    rename %1 "BNPPLS_FRA_2_%horodatage%_!FinalLotNum!_0000!NN!.eml"
    set /A NN=NN+1
    rem GOTO: EOF
    Rem ----- fin Fonction Renommage ----
    
    
    :LOGS
    echo Pas de fichier à traiter: dossier Scan vide ! > %logfile%
    
    rem :EOF
    rem exit
    
    pause
    exit /b 0
    
    :archive
    pushd "###"
    
    set count=0
    set /a num+=1
    set index=0000!num!
    set index=!index:~-5!
    
    "C:\Program Files\7-Zip\7z.exe" a "!zipfile!_!index!.7z" "*.%ext%"
    
    >nul move "!zipfile!_!index!.7z" "%repArch%"
    del /f /q "*.*"
    
    popd
    goto :eof
    J'ai été obligé de commenter quelques lignes qui me gênaient pour mes tests, j'ai rajouté quelques guillemets par-ci par-là, j'ai simplifié une de tes fonctions.

    ps : mes journées de travail sont très longues, par conséquent je ne suis disponible qu'en soirée

  7. #7
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Je conseil toujours d'utiliser la version portable et console de 7-zip (7za.exe) pour ce genre d'opération.

  8. #8
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 161
    Points : 44
    Points
    44
    Par défaut
    Bonjour Barnabe

    J'ai testé ton script mais ca ne marche pas: il genere des erreurs :-(

    Nom : screen.JPG
Affichages : 986
Taille : 44,5 Ko

  9. #9
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Bonjour,

    Ok dans ce cas donne-moi ton script en entier, je vais essayer d'intégrer mon code autrement.

    Est-ce que tu pourrais me détailler un peu plus ce que fait chaque étape de ton script ?

  10. #10
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 161
    Points : 44
    Points
    44
    Par défaut
    Merci infiniment barnabe.....

    tu trouveras un zip contenant tout ce qui est utilisé pour mon script (dossier, fichier conf pour le compteur..) + mon script d'origine (sans ton code).

    Ce qu'il fait:

    - il scanne le dossier "SCAN_FRA" (qui est le dossier de depot de fichier .eml).
    - il move tous fichiers .eml dans un dossier de travail "WORK_FRA"
    - il move tous les autres fichier qui ont une autres extention dans un dossier "REJET"
    - Renomme tous les fichiers du dossier WORK_FRA suivant une convention de nommage de défini "BNPLS_...." via la fonction :INCREM
    - Il créé un fichier zip avec la meme convention de nommage avec un compteur en completant le compteur avec des zeros de sorte à ne pas depasser 8 digits (exemple: ..._00000001 ou 00000345) via a fonction :LESS_8 (note: je n'ai pas su mettre en place même compteur pour les fichiers contenus dans le zip et du coup en attendant j'ai mis des zero en dur dans la fonction : INCREM (_000%NN%).

    - Il envoi le zip via CFT (tu peux desactiver ca)

    Il créé une log régulierement pour chaque etage via la fonction :LOGS (qui est pas terrible non plus :-))

    barnabe.zip

    Objetifs:

    Limiter le nombre de fichier dans le zip pour ne pas depasser 30 fichiers par zip maximum donc je ne sais pas comment gérer cela sachant que les depots se font au fil de l'eau donc il faudrait pouvoir créér un zip en limitant à 30 puis reprendre les autres fichiers et refare un zip de 30 max et ainsi de suite sans court-circuiter le process en cours qui lui continuera à déverser d'autre fichiers dans SCAN_FRA donc je me demande s'il faut pas encore un autre dossier de travail....
    je ne sais si c est clair...

  11. #11
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Bonjour,

    Je te suggère d'utiliser la version standalone de 7zip, elle s'appelle 7za, c'est elle que j'utilise pour ton script.

    Cette fois-ci c'est obligé que ça fonctionne, sinon je saute par la fenêtre :

    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
    @echo off
    
    powershell -Command "get-childItem D:\CFT\Tempus\Upload\BPM_UAT\SCAN_FRA\*.eml | rename-item -newname { $_.name -replace '!','' }"
    
    Setlocal EnableExtensions EnableDelayedExpansion
    
    cd /d %~dp0 || exit /b 1
    
    Rem ---- définition des variables---
    	
    	set files=eml
    	set currentpath=%~dp0
    	set today=%date:~6,4%%date:~3,2%%date:~0,2%
    	set logdir=%currentpath%log
    	REM set logfile=%logdir%\scan_fra_%today%_%time:~0,2%h%time:~3,2%%time:~6,2%.log
    	set /p LotNum=<%currentpath%conf\lot.conf
    	set LotNum=!LotNum: =!
    	set logfile=%logdir%\ScanFra_%today%_LOT_!LotNum!.log
    	set /a LotNumNext=!LotNum!+1
    	
    echo lot num = !LotNum!
    echo lot suivant = !LotNumNext!
    
    set hour=%time:~0,2%
    set min=%time:~3,2%
    set horodatage=%today%T%hour%%min%
    set horodatage=!horodatage: =!
    
    	set repWork=%~dp0WORK_FRA
    	set repScan=%~dp0SCAN_FRA
    	set repArch=%~dp0ARCHIVE
    	set repRejet=%~dp0REJET
    	
    Rem echo !horodatage!
    Rem echo %zipfile%
    Rem echo %hour%
    Rem echo %min%
    Rem echo total %hour%%min%
    Rem echo %dt%
    
    Rem ------------------------
    
    REM ---- Fonction pour compléter le numéro de lot avec des 0 devant pour respecter la taille de String 8 ----
    
    set FinalLotNum=00000000!LotNum!
    set FinalLotNum=!FinalLotNum:~-8!
    
    REM -----------fin bloc de fonction -------
    
    REM ---- Définiton du nom du zip en sortie -----------
    
    	set zipfile=BNPPLS_FRA_2_!horodatage!_!FinalLotNum!
    	set zipfile=!zipfile: =!
    
    REM ------- fin définition du nom de zip -----
    
    
    Rem ----Debut programme -------
    
    if not exist "%logdir%" (mkdir "%logdir%")
    
    move "%repScan%\*.%files%" "%repWork%" >> !logfile!
    2>nul move /y "%repScan%\*.*" "%repRejet%" >> !logfile!
    
    cd %repWork% >> !logfile!
    
    REM ---
    
    set count=0
    set num=0
    set var=0
    
    if not exist "###" (mkdir "###")
    
    FOR %%I IN (*.%files%) DO (
    
    	set /a count+=1
    	set /a num+=1
    	set index=0000!num!
    	set index=!index:~-5!
    	move "%%~I" "###\!zipfile!_!index!.%files%" >> !logfile!
    	if !count! EQU 30 (call:archive)
    
    )
    move "###\*.%files%" "%repWork%" >> !logfile!
    rmdir /s /q "###"
    
    Rem "C:\Program Files\WinZip\Winzip8.1_FR\WINZIP32.exe" -a "!zipfile!.zip" "*.%files%" >> !logfile!
    Rem "C:\Program Files\7-Zip\7z.exe" a "!zipfile!.7z" "*.%files%" >> !logfile!
    
    Rem --- incrémentation du numéro de lot -----
    
    echo !LotNumNext! > %currentpath%conf\lot.conf
    
    Rem ----- Envoi CFT -----------
    set part=AUTOMATU
    set idf=WWDDIDEM
    set env=U
    
    REM D:\APPS\CFTG\scripts\cftxsend.bat -D "%part%" -I "%idf%" -F "%chemin%+%fichier%" -P "%env%_%fichier%" –O “RUSER=CANON01M,SUSER=10000000,SAPPL=0x515E7A98”
    REM D:\APPS\CFTG\scripts\cftxsend.bat -D "%part%" -I "%idf%" -F "!zipfile!.7z" -P "%env%_%zipfile%"
    REM D:\APPS\CFTG\scripts\cftxsend.bat -D "AUTOMATQ" -I "WWDDIDEM" -F "!zipfile!.7z" -P "Q_%zipfile%"
    REM D:\APPS\CFTG\scripts\cftxsend.bat -D "AUTOMATU" -I "WWDDIDEM" -F "!zipfile!.7z" -P "U_%zipfile%"
    
    Rem ----- fin envoi CFT -------
    
    exit /b 0
    
    
    :archive
    pushd "###"
    
    set count=0
    set /a var+=1
    set compteur=0000!var!
    set compteur=!compteur:~-5!
    
    7za.exe a "!zipfile!_!compteur!.7z" "*.%files%"
    
    move "!zipfile!_!compteur!.7z" "%repArch%" >> !logfile!
    del /f /q "*.*"
    
    popd
    goto :eof

  12. #12
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 161
    Points : 44
    Points
    44
    Par défaut
    Merci Barnabe!!!

    je viens de tester mais bizarrement il plante sur la variable currentpath de toute evidence car il interprete plus le %~dp0 bizarrement

    Nom : screen.JPG
Affichages : 955
Taille : 20,8 Ko

    y a un truc qui m'echappe car meme car quand je tente de faire afficher le contenu de a vaiable il me sort %~dp0

    Nom : screen2.JPG
Affichages : 925
Taille : 13,0 Ko

  13. #13
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    La variable %0 n'est disponible que dans un script de commande

  14. #14
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 161
    Points : 44
    Points
    44
    Par défaut
    justement à l'origine elle est dans le script mais elle n etait pas interprété d'où mon test à l exterieur du script :-(

  15. #15
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Oui je comprend, mais ton test n'est pas probant.

    Le fait quelle n'est pas interprétée n'est donc qu'une supposition non confirmée pour le moment.

  16. #16
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 161
    Points : 44
    Points
    44
    Par défaut
    Bonjour Barnabe

    J'ai debuggé pas à pas le code et j'ai compris l'erreur: certains variables ne comporte pas le bon path

    Nom : screen.JPG
Affichages : 926
Taille : 40,0 Ko

    je vais mettre à jour et tester

    je te tiens au courant

  17. #17
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 161
    Points : 44
    Points
    44
    Par défaut
    Hello Barnabe !!

    t'es un génie toi! ton script fonctionne !! merci aussi pour avoir améliorer le contenu d'origine !!

    En revanche j'essaie de comprendre car il ne semble pas faire exactement ce qui est attendu:

    J'ai fais un test en mettant 40 fichiers dans SCAN_FRA: il deplace tous les fichiers dans WORK_FRA puis créé un zip de 30 fichiers et le deplace dans ARCHIVE => OK

    Mais les 10 fichiers restants reste dans WORK_FRA.

    Lors de l'itération suivante je remet 40 fichiers qui sont deplacés dans WORK_FRA puis un zip est créée avec 30 fichiers pris parmi les fichiers restants sans reprendre ceux d avant en premier puis les suivants...

    puis j ai refait un test avec seulement 4 fichiers dans le dossiers SCAN_FRA mais là il se contente de déplacer les fichiers mais ne créé pas ZIP

    tu es d accord avec ce resultat?

  18. #18
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    En fait tout est possible, soit on fait des archives de 30 puis on fait une archive avec les fichiers restants, soit on fait des archives de 30 et on remet les fichiers restants dans %repWork%, mais si tu veux qu'ils soient repris en premier là ça devient un peu plus compliqué.

    C'est à toi de choisir.

  19. #19
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 161
    Points : 44
    Points
    44
    Par défaut
    hello

    oui c est exactement ca l'idée est de faire une archive de max 30 puis archive complementaire avec le reste.

    et natuellement il faut pouvoir faire des archives meme quand le nombre de fichier est inféeieur a 30 car le test que j ai fais aussi c est lancé le script avec 4 fichiers et il s est rien passé à part le move dans work

  20. #20
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Ok c'est ce que j'avais prévu dès le début, sauf que j'ai changé ça dans la dernière version car je croyais que tu voulais faire autrement.

    Pour faire une archive avec les fichiers restants, il suffit de remplacer cette ligne :
    move "###\*.%files%" "%repWork%" >> !logfile!

    par cette ligne : call:archive

Discussions similaires

  1. Shell script pour compter le nombre de fichiers par extension
    Par andress33 dans le forum Shell et commandes GNU
    Réponses: 16
    Dernier message: 30/03/2015, 01h26
  2. [Vxi3] comment Compresser la publication dans un fichier ZIP.
    Par zhi_yanyan2004 dans le forum Deski
    Réponses: 3
    Dernier message: 04/12/2012, 09h08
  3. Réponses: 0
    Dernier message: 12/08/2009, 22h09
  4. Réponses: 2
    Dernier message: 15/06/2009, 18h41
  5. Réponses: 7
    Dernier message: 10/10/2007, 19h23

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