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 :

Erreur dans l'exécution d'un script de récupération de données de fichiers [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 12
    Par défaut Erreur dans l'exécution d'un script de récupération de données de fichiers
    Bonjour à tous,

    Je crée ce sujet car une connaissance m'a créé un script en batch dont le but est de catégoriser des types de fichier dans une série de dossiers, d'après leur taille (x*y). Il m'a fait une première version dont l'affichage des résultats dans le .txt est parfaite pour l'intégrer directement à mon fichier excel, mais a fait des modifications pour le rendre plus précis dans sa catégorisation (d'après leur taille x*y justement, en utilisant exiftool). Mais il n'a pas remis cet affichage final de la première version qui rendait sous forme de phrases les résultats, et malheureusement il doit être occupé et ne me répond plus. J'ai essayé de modifier le script moi-même mais vraiment je n'y connais pas grand chose donc le programme se lance sans résultat. Je vous mets ici le code où j'ai tenté d'intégrer la mise en page de la première version dans la deuxième version.

    J'espère que mon propos est suffisamment clair, je ne souhaitais pas vous noyer sous les détails, mais n'hésitez pas à me signaler toute précision nécessaire. En vous remerciant par avance.
    Code Batch : 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
    @echo off
    cd %~p0
    del error.txt
    dir /a:d /b > list.txt
    FOR %%A IN (list.txt) DO set size=%%~zA
    IF "%size%"==0"" (
    ECHO Aucun dossier trouver.
    pause>nul
    exit
    )
    echo Resultat : >a.txt
    echo.>>a.txt
    set a7=0
    set a5=0
    set a6=0
    set a4=0
    set fichea4=fiches
    set fichea5=fiches
    set fichea6=fiches
    set fichea7=fiches
     
    echo stop>>list.txt
    for /f "tokens=2 delims=:" %%a in ('find /c /v "" list.txt') do set /a Lines=%%a
    set /A Lines=%Lines%-1
    echo Dossier trouver.
    echo Nombre de dossier : %Lines%
    echo Nom des dossier : 
    set li=0
    set li2=0
    :retour
     
    more +%li% list.txt>list2.txt
    set /p string2=< list2.txt
    set string3=%string2: =%
    set /A li=%li%+1
    if "%string3%"=="stop" (
    goto all
    )
    echo %string3%
    dir /s /b %string3%\*.jpg >temp.txt
     
    FOR %%A IN (temp.txt) DO set size=%%~zA
     
    echo stop>>temp.txt
    echo Fichier en cours : 
     
    :retour2
    more +%li2% temp.txt>temp2.txt
    set /p string4=< temp2.txt
     
    set string5=%string4: =%
    set /A li2=%li2%+1
    if "%string5%"=="stop" (
    set li2=0
    echo Dossier : %string3% >> R.txt
    if "%a4%"=="0" (goto a4skip)
    if "%a4%"=="1" (set fichea4=fiche)
     
    set "a=%a4% %fichea4% papier A4"
    :a4skip
     
    if "%a5%"=="0" (goto a5skip)
    if "%a5%"=="1" (set fichea5=fiche)
    if "%a6%"=="0" (set "a=%a% et %a5% %fichea5% papier A5" & goto a5skip)
    if "%a4%"=="0" (set "a=%a5% %fichea5% papier A5" & goto a5skip)
    if NOT "%a5%"=="0" (set "a=%a%, %a5% %fichea5% papier A5")
     
    :a5skip
     
    if "%a6%"=="0" (goto a6skip)
    if "%a6%"=="1" (set fichea6=fiche)
    if "%a5%"=="0" (set "a=%a6% %fichea6% papier A6")
    if "%a7%"=="0" (set "a=%a% et %a6% %fichea6% papier A6" & goto a6skip)
    if NOT "%a6%"=="0" (set "a=%a%, %a6% %fichea6% papier A6")
     
    :a6skip
     
    if "%a7%"=="0" (goto a7skip)
    if "%a7%"=="1" (set fichea7=fiche)
    if "%a6%"=="0" (set "a=%a7% %fichea7% papier A7")
    if NOT "%a7%"=="0" (set "a=%a% et %a7% %fichea7% papier A7")
    :a7skip
     
    echo. >>R.txt
    set a7=0
    set a5=0
    set a6=0
    set a4=0
    goto retour
    )
     
    ) else (
    set "filename=%string5%"
    For %%A in ("%filename%") do (
        set i=%%~nxA
    )
     
     
     
    set lef=%string3%\%i%
    echo %lef%
    echo %string5% | seed "s/ //g" > tiph.txt
    set /p string7=<tiph.txt
    exiftool -ImageSize %lef% | seed "s/Image Size                      : //g" > temp3.txt
    set /p string=<temp3.txt
    for /f "tokens=1 delims=x" %%a in ("%string%") do (
    set x=%%a
    )
    set "y=%string:x=" & set "y=%"
     
     
    if %x% GEQ 1200 (
     
    if %x% LEQ 1600 (
     
    if %y% GEQ 900 (
     
    if %y% LEQ 1330 (
    echo +1 A6
    set /a a6="%a6%+1"
    goto retour2
    )
    )
    )
    )
     
    if %x% GEQ 1400 (
     
    if %x% LEQ 1700 (
     
    if %y% GEQ 2000 (
     
    if %y% LEQ 2500 (
    echo +1 A5
    set /a a5="%a5%+1"
    goto retour2
    )
    )
    )
    )
     
    if %x% GEQ 2400 (
     
    if %x% LEQ 2600 (
     
    if %y% GEQ 2900 (
     
    if %y% LEQ 3200 (
    echo +1 A4
    set /a a4="%a4%+1"
    goto retour2
    )
    )
    )
    )
    echo Error.
    echo Problem with file : "%string5%">> error.txt
    goto retour2
    pause>nul
    :all
    timeout /t 2 >NUL
    if exist "error.txt" start error.txt
    start R.txt
    del Final.txt
    del list.txt
    del list2.txt
    del temp.txt
    del temp2.txt

    Je vous mets également pour comparer la première version du script (bon affichage dans le .txt, mais méthode utilisant le poids des fichiers), puis la seconde version (mauvais affichage, mais bonne méthode en x*y).

    VERSION 1
    Code Batch : 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
    @echo off
    cd %~p0
    dir /a:d /b > list.txt
    FOR %%A IN (list.txt) DO set size=%%~zA
    IF "%size%"==0"" (
    ECHO Aucun dossier trouver.
    pause>nul
    exit
    )
     
    echo Resultat : >a.txt
    echo. >>a.txt
    set a7=0
    set a5=0
    set a6=0
    set a4=0
    set fichea4=fiches
    set fichea5=fiches
    set fichea6=fiches
    set fichea7=fiches
    echo stop>>list.txt
    for /f "tokens=2 delims=:" %%a in ('find /c /v "" list.txt') do set /a Lines=%%a
    set /A Lines=%Lines%-1
    echo Dossier trouver.
    echo Nombre de dossier : %Lines%
    echo Nom des dossier : 
    set li=0
    set li2=0
    :retour
     
    more +%li% list.txt>list2.txt
    set /p string2=< list2.txt
    set string3=%string2: =%
    set /A li=%li%+1
    if "%string3%"=="stop" (
    goto all
    )
    dir /s /b %string3%\*.jpg >temp.txt
    echo stop>>temp.txt
    :retour2
    more +%li2% temp.txt>temp2.txt
    set /p string4=< temp2.txt
     
    set string5=%string4: =%
    set /a li2=%li2%+1
     
    if "%string5%"=="stop" (goto oo)
    goto else
    :oo
    set li2=0
    echo Dossier : %string3% >> R.txt
    if "%a4%"=="0" (goto a4skip)
    if "%a4%"=="1" (set fichea4=fiche)
     
    set "a=%a4% %fichea4% papier A4"
    :a4skip
     
    if "%a5%"=="0" (goto a5skip)
    if "%a5%"=="1" (set fichea5=fiche)
    if "%a6%"=="0" (set "a=%a% et %a5% %fichea5% papier A5" & goto a5skip)
    if "%a4%"=="0" (set "a=%a5% %fichea5% papier A5" & goto a5skip)
    if NOT "%a5%"=="0" (set "a=%a%, %a5% %fichea5% papier A5")
     
    :a5skip
     
    if "%a6%"=="0" (goto a6skip)
    if "%a6%"=="1" (set fichea6=fiche)
    if "%a5%"=="0" (set "a=%a6% %fichea6% papier A6")
    if "%a7%"=="0" (set "a=%a% et %a6% %fichea6% papier A6" & goto a6skip)
    if NOT "%a6%"=="0" (set "a=%a%, %a6% %fichea6% papier A6")
     
    :a6skip
     
    if "%a7%"=="0" (goto a7skip)
    if "%a7%"=="1" (set fichea7=fiche)
    if "%a6%"=="0" (set "a=%a7% %fichea7% papier A7")
    if NOT "%a7%"=="0" (set "a=%a% et %a7% %fichea7% papier A7")
    :a7skip
     
    echo %a%>>R.txt
    echo. >>R.txt
     
    set a7=0
    set a5=0
    set a6=0
    set a4=0
    goto retour
    :else
    echo %string5%
    FOR %%A IN (%string5%) DO set size5=%%~zA
    set /a size5="%size5%/1000"
    if %size5% LEQ 300 (
    set /a a7="%a7%+1"
    goto retour2
    )
    if %size5% LEQ 600 (
    set /a a6="%a6%+1"
    goto retour2
    )
     
    if %size5% LEQ 1200 (
    set /a a5="%a5%+1"
    goto retour2
    )
    if %size5% GEQ 1200 (
    set /a a4="%a4%+1"
    goto retour2
    )
    echo Possible error contact riyad.
    pause>Nul
     
     
    :all
    timeout /t 2 >NUL
    echo Fini
    start R.txt
    del Final.txt
    del list.txt
    del list2.txt
    del temp.txt
    del temp2.txt

    VERSION 2
    Code Batch : 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
    @echo off
    cd %~p0
    del error.txt
    dir /a:d /b > list.txt
    FOR %%A IN (list.txt) DO set size=%%~zA
    IF "%size%"==0"" (
    ECHO Aucun dossier trouver.
    pause>nul
    exit
    )
    echo Resultat : >a.txt
    echo.>>a.txt
    set a7=0
    set a5=0
    set a6=0
    set a4=0
    echo stop>>list.txt
    for /f "tokens=2 delims=:" %%a in ('find /c /v "" list.txt') do set /a Lines=%%a
    set /A Lines=%Lines%-1
    echo Dossier trouver.
    echo Nombre de dossier : %Lines%
    echo Nom des dossier : 
    set li=0
    set li2=0
    :retour
     
    more +%li% list.txt>list2.txt
    set /p string2=< list2.txt
    set string3=%string2: =%
    set /A li=%li%+1
    if "%string3%"=="stop" (
    goto all
    )
    echo %string3%
    dir /s /b %string3%\*.jpg >temp.txt
     
    FOR %%A IN (temp.txt) DO set size=%%~zA
     
    echo stop>>temp.txt
    echo Fichier en cours : 
     
    :retour2
    more +%li2% temp.txt>temp2.txt
    set /p string4=< temp2.txt
     
    set string5=%string4: =%
    set /A li2=%li2%+1
    if "%string5%"=="stop" (
    set li2=0
    echo Dossier : %string3% >> a.txt
    echo A4 = %a4% >> a.txt
    echo A5 = %a5% >> a.txt
    echo A6 = %a6% >> a.txt
    echo A7 = %a7% >> a.txt
    echo. >>a.txt
    set a7=0
    set a5=0
    set a6=0
    set a4=0
    goto retour
    )
     
    ) else (
    set "filename=%string5%"
    For %%A in ("%filename%") do (
        set i=%%~nxA
    )
     
     
     
    set lef=%string3%\%i%
    echo %lef%
    echo %string5% | seed "s/ //g" > tiph.txt
    set /p string7=<tiph.txt
    exiftool -ImageSize %lef% | seed "s/Image Size                      : //g" > temp3.txt
    set /p string=<temp3.txt
    for /f "tokens=1 delims=x" %%a in ("%string%") do (
    set x=%%a
    )
    set "y=%string:x=" & set "y=%"
     
     
    if %x% GEQ 1200 (
     
    if %x% LEQ 1600 (
     
    if %y% GEQ 900 (
     
    if %y% LEQ 1330 (
    echo +1 A6
    set /a a6="%a6%+1"
    goto retour2
    )
    )
    )
    )
     
    if %x% GEQ 1400 (
     
    if %x% LEQ 1700 (
     
    if %y% GEQ 2000 (
     
    if %y% LEQ 2500 (
    echo +1 A5
    set /a a5="%a5%+1"
    goto retour2
    )
    )
    )
    )
     
    if %x% GEQ 2400 (
     
    if %x% LEQ 2600 (
     
    if %y% GEQ 2900 (
     
    if %y% LEQ 3200 (
    echo +1 A4
    set /a a4="%a4%+1"
    goto retour2
    )
    )
    )
    )
    echo Error.
    echo Problem with file : "%string5%">> error.txt
    goto retour2
    pause>nul
    :all
    timeout /t 2 >NUL
    if exist "error.txt" start error.txt
    start a.txt
    del Final.txt
    del list.txt
    del list2.txt
    del temp.txt
    del temp2.txt

  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
    Dur à comprendre, je préfère carrément repartir du besoin, des entrants, du fichier attendus et des critères de conception.

  3. #3
    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
    Le powershell est il envisageable ou redibitoire ?

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 12
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Dur à comprendre, je préfère carrément repartir du besoin, des entrants, du fichier attendus et des critères de conception.
    Bonjour,

    Merci pour cette réponse. Je vais effectivement faire un résumé concis, c'est sûrement plus compréhensible.

    Je travaille avec des "boîtes" correspondant chacun à une série de dossiers, chacun étant rempli d'un certain nombre de jpg, représentant toutes des fiches écrites de différentes tailles (A6, A5..). Je dois en faire un inventaire complet, qui s'affiche dans mon fichier Excel sous cette forme : "4 fiches papier A5, 43 fiches papier A6 et 40 fiches papier A7". Le but était donc d'avoir un script qui détermine cela et mette en page avec cette formulation dans un fichier .txt pour qu'il ne me reste qu'a copier et intégrer. Le script se sert d'exiftool (que je mets dans une boîte avec le script au moment de le lancer) pour obtenir les informations des dimensions de chaque fiche, et ensuite le script crée la mise en page finale avec cette partie :

    Code Batch : 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
    if "%a4%"=="0" (goto a4skip)
    if "%a4%"=="1" (set fichea4=fiche)
     
    set "a=%a4% %fichea4% papier A4"
    :a4skip
     
    if "%a5%"=="0" (goto a5skip)
    if "%a5%"=="1" (set fichea5=fiche)
    if "%a6%"=="0" (set "a=%a% et %a5% %fichea5% papier A5" & goto a5skip)
    if "%a4%"=="0" (set "a=%a5% %fichea5% papier A5" & goto a5skip)
    if NOT "%a5%"=="0" (set "a=%a%, %a5% %fichea5% papier A5")
     
    :a5skip
     
    if "%a6%"=="0" (goto a6skip)
    if "%a6%"=="1" (set fichea6=fiche)
    if "%a5%"=="0" (set "a=%a6% %fichea6% papier A6")
    if "%a7%"=="0" (set "a=%a% et %a6% %fichea6% papier A6" & goto a6skip)
    if NOT "%a6%"=="0" (set "a=%a%, %a6% %fichea6% papier A6")
     
    :a6skip
     
    if "%a7%"=="0" (goto a7skip)
    if "%a7%"=="1" (set fichea7=fiche)
    if "%a6%"=="0" (set "a=%a7% %fichea7% papier A7")
    if NOT "%a7%"=="0" (set "a=%a% et %a7% %fichea7% papier A7")
    :a7skip

    Mais comme je disais, j'ai voulu importer cette partie qui venait d'un premier script qui ne se basait alors pas sur les dimensions, dans un seconde version qui utilise exiftool, et là je n'arrive pas à le faire fonctionner.

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 12
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Le powershell est il envisageable ou redibitoire ?
    Tout à fait, mais le souci c'est vraiment que je suis de mon côté quasi inculte sur ces domaines, j'ai les très grosses bases théoriques mais c'est vraiment une autre personne qui m'a écrit cela et a choisi d'écrire en batch.

  6. #6
    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
    Serait il possible d'avoir quelques dossier de test avec des images depersonnalisés ainsi que le résultat attendu ?
    Ceci permettra de travailler plus efficacement.

    PS : Le script batch s'appuie sur d'autre outil tiers notamment seed

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 12
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Serait il possible d'avoir quelques dossier de test avec des images depersonnalisés ainsi que le résultat attendu ?
    Ceci permettra de travailler plus efficacement.

    PS : Le script batch s'appuie sur d'autre outil tiers notamment seed
    Bien sûr, voici un lien wetransfer (25 mo) : https://we.tl/t-cbjSPh6spu
    Quatre dossier qui appartiennent à la même boîte. Donc sont normalement rangés dans un dossier d'où je lance le script.

    Actuellement, le script donne ceci si je le lance pour ces ' dossier :
    Dossier : EPHE_CWG_JY_224_000394
    A4 = 0
    A5 = 0
    A6 = 27
    A7 = 0

    Dossier : EPHE_CWG_JY_224_000395
    A4 = 0
    A5 = 1
    A6 = 11
    A7 = 0

    Dossier : EPHE_CWG_JY_224_000396
    A4 = 0
    A5 = 0
    A6 = 13
    A7 = 0

    Dossier : EPHE_CWG_JY_224_000397
    A4 = 0
    A5 = 0
    A6 = 3
    A7 = 0
    Il va également générer un fichier.txt pour chaque "erreur" (des fichiers qui échappent aux conditions de catégorisations car leur format est inhabituel, je dois de toute manière voir ça manuellement). Comme je le disais, il s'agirait d'avoir à la place de ces listes en colonne, un affichage propre avec ce format : "3 fiches papier A4, 1 fiche papier A5 et 13 fiches papier A6". La mise en page s'adapte en fonction du contenu (par exemple rajoute un pluriel à "fiche" si nécessaire, et n'affiche pas une catégorie si non présente dans le dossier).

    Merci par ailleurs pour votre réponse.

  8. #8
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 12
    Par défaut
    Tout à fait pour seed par ailleurs, voici à quoi ressemble l'ensemble des fichiers qu'on m'a transmis pour le script : Nom : Capture d’écran 2022-03-23 192258.png
Affichages : 223
Taille : 25,4 Ko

  9. #9
    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
    Dernière question, comment définit u les format A4 -> A7 ?
    Il semble qu'il y es plusieurs algo (taille min et max en x + taille min et max en y) ou autre chose ? juste x juste y ?
    Wikipedia donne des tailles exacts ... : https://fr.wikipedia.org/wiki/Format_de_papier

  10. #10
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 12
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Dernière question, comment définit u les format A4 -> A7 ?
    Il semble qu'il y es plusieurs algo (taille min et max en x + taille min et max en y) ou autre chose ? juste x juste y ?
    Wikipedia donne des tailles exacts ... : https://fr.wikipedia.org/wiki/Format_de_papier
    Alors comme les fiches concernées ont été notamment coupées à la main, c'est parfois un peu trop approximatif pour se baser sur les normes données ici... Donc on avait choisi de faire sous ce format : x*y, si x est compris entre une valeur min. et une valeur max, et pareil pour y. Et il était important d'avoir les deux conditions (x et y) remplies car si une seule est prise en compte, il y a des recoupements et donc des erreurs entre différents formats. Pour les valeurs choisies elles sont ici dans l'ordre dans le script, de A6 à A4 (on avait au final exclu A7 c'est vrai car il y avait trop de problème lié à la numérisation de ces fiches :

    Code Batch : 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
    if %x% GEQ 1200 (
     
    if %x% LEQ 1600 (
     
    if %y% GEQ 900 (
     
    if %y% LEQ 1330 (
    echo +1 A6
    set /a a6="%a6%+1"
    goto retour2
    )
    )
    )
    )
     
    if %x% GEQ 1400 (
     
    if %x% LEQ 1700 (
     
    if %y% GEQ 2000 (
     
    if %y% LEQ 2500 (
    echo +1 A5
    set /a a5="%a5%+1"
    goto retour2
    )
    )
    )
    )
     
    if %x% GEQ 2400 (
     
    if %x% LEQ 2600 (
     
    if %y% GEQ 2900 (
     
    if %y% LEQ 3200 (
    echo +1 A4

  11. #11
    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
    Je te propose ce script PowerShell (v1 )?
    Tu dois l'enregistrer dans un fichier .ps1 (exemple : analyse.ps1), dans le dossier racine que tu veux scanner (chemin modifiable par $dossier = ".")

    Code powershell : 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
    $dossier = "."
     
    $format = @(
                [PSCustomObject]@{
                    Format = 'A4'
                    minX = 2400
                    maxX = 2600
                    minY = 2900
                    maxY = 3200
                }
                ,
                    [PSCustomObject]@{
                    Format = 'A5'
                    minX = 1400
                    maxX = 1700
                    minY = 2000
                    maxY = 2500
                }
                ,
                [PSCustomObject]@{
                    Format = 'A6'
                    minX = 1200
                    maxX = 1600
                    minY = 900
                    maxY = 1330
                }
            )
     
     
    #########################################################################
     
    [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
     
    $resultOK = @()
    $resultKO = @()
    $format | Add-Member -NotePropertyMembers @{nombre=0}
     
    $folders = Get-ChildItem -LiteralPath $dossier -Directory -Force
     
    foreach($folder in $folders)
    {
        Write-Host "Analyse du dossier `"${folder}`""
        $format | ForEach-Object {$_.nombre = 0}
     
        Get-ChildItem -Path "$($folder.FullName)\*.jpg" -File -Recurse -Force | ForEach-Object {
            $fileOk = $false
            try
            {
                $img = [System.Drawing.Image]::FromFile($_)
                $x = $img.Width
                $y = $img.Height
                $img.Dispose()
                $fileOk = $format | Where-Object {$x -ge $_.minX -and $x -le $_.maxX -and $y -ge $_.minY -and $y -le $_.maxY} | ForEach-Object {$_.nombre += 1;$true}
            }
            catch
            {}
            if (!$fileOk)
            {
                $resultKO += $_.FullName
            }
        }
     
        $resultDossier = $format | ForEach-Object {
            if ($_.nombre -ne 0)
            {
                "$($_.nombre) fiche$(if($_.nombre -gt 1){"s"}) papier $($_.Format)"
            }
        }
        if ($resultDossier.count -ne 0)
        {
            $resultOK += "${folder} : $($resultDossier -join ", ")"
        }
    }
     
    $resultOK | Set-Content -LiteralPath "${dossier}\Resultat.txt" -Encoding utf8
    $resultKO | Set-Content -LiteralPath "${dossier}\Erreur.txt" -Encoding utf8
     
    Write-Host "`n`nfin"
    Read-Host

    Il doit te sortir 2 fichiers : Erreur.txt, et Resultat.txt

    PS1 : Tu devra peut être autoriser l'exécution d'un script PowerShell sur ton poste: https://www.pcastuces.com/pratique/astuces/3908.htm

  12. #12
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 12
    Par défaut
    C'est super, merci ! Cela marche parfaitement. Il faut vraiment que je me mette à apprendre powershell

    J'espère ne pas abuser de votre temps, mais pensez-vous que cela soit possible d'avoir entre les deux dernières valeurs la conjonction "et" ? Ce n'est vraiment pas grave sinon, mais c'est pour correspondre à la mise en page que j'avais effectué. J'en profite également rapidement pour vous demander si dans le même script, ou alors par un autre moyen (à effectuer moi-même par exemple) il était possible de dénombrer le nombre total de fiches par dossier ? J'avais restreint ma demande à ce que j'avais pu demander à ma connaissance, mais en fait dans le résultat final de mes fiches, ça doit ressembler à cela :

    Nom : Capture d’écran 2022-03-23 225111.png
Affichages : 219
Taille : 3,0 Ko

    Pensez-vous que c'est facile et rapide à ajouter ? Mais j'ai déjà tout à fait abusé de votre temps donc aucun problème sinon, et encore merci pour votre implication !

  13. #13
    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
    Oui possible je regarderai demain.

  14. #14
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 12
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Oui possible je regarderai demain.
    Encore merci, et bonne soirée à vous

  15. #15
    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
    V2
    Code powershell : 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
    $dossier = "."
     
    $format = @(
                [PSCustomObject]@{
                    Format = 'A4'
                    minX = 2400
                    maxX = 2600
                    minY = 2900
                    maxY = 3200
                }
                ,
                    [PSCustomObject]@{
                    Format = 'A5'
                    minX = 1400
                    maxX = 1700
                    minY = 2000
                    maxY = 2500
                }
                ,
                [PSCustomObject]@{
                    Format = 'A6'
                    minX = 1200
                    maxX = 1600
                    minY = 900
                    maxY = 1330
                }
            )
     
     
    #########################################################################
     
    [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
     
    $resultOK = @()
    $resultKO = @()
    $format | Add-Member -NotePropertyMembers @{nombre=0}
     
    $folders = Get-ChildItem -LiteralPath $dossier -Directory -Force
     
    foreach($folder in $folders)
    {
        Write-Host "Analyse du dossier `"${folder}`""
        $format | ForEach-Object {$_.nombre = 0}
     
        Get-ChildItem -Path "$($folder.FullName)\*.jpg" -File -Recurse -Force | ForEach-Object {
            $fileOk = $false
            try
            {
                $img = [System.Drawing.Image]::FromFile($_)
                $x = $img.Width
                $y = $img.Height
                $img.Dispose()
                $fileOk = $format | Where-Object {$x -ge $_.minX -and $x -le $_.maxX -and $y -ge $_.minY -and $y -le $_.maxY} | ForEach-Object {$_.nombre += 1;$true}
            }
            catch
            {}
            if (!$fileOk)
            {
                $resultKO += $_.FullName
            }
        }
     
        $resultDossier = $format | ForEach-Object {
            if ($_.nombre -ne 0)
            {
                "$($_.nombre) fiche$(if($_.nombre -gt 1){"s"}) papier $($_.Format)"
            }
        }
     
        $str = if (@($resultDossier).count -eq 1)
        {
            "$($folder.Name) : ${resultDossier}"
        }
        elseif ($resultDossier.count -gt 1)
        {
            "$($folder.Name) : $(($resultDossier | Select-Object -SkipLast 1) -join ", ") et $($resultDossier[-1])"
        }
     
        if ($str)
        {
            $resultOK += $str + ". Image/jpeg, nombre total de vues $(($format | Measure-Object -Sum -Property nombre).Sum)"
        }
    }
     
    $resultOK | Set-Content -LiteralPath "${dossier}\Resultat.txt" -Encoding utf8
    $resultKO | Set-Content -LiteralPath "${dossier}\Erreur.txt" -Encoding utf8
     
    Write-Host "`n`nfin"
    Read-Host

    PS : Pour info tu peux ajouter ou supprimer des formats dans $format si besoin il faut juste bien suivre la syntaxe

  16. #16
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 12
    Par défaut
    Je vous renouvelle mes remerciements je n'attendais pas autant en venant demander de l'aide, ça remplit parfaitement la fonction attendue !

  17. #17
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 12
    Par défaut
    Simplement pour vous demander, le décompte du nombre de fichiers dans chaque dossier se fait à partir des formats détectés ?
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    (($format | Measure-Object -Sum -Property nombre).Sum)

    Car en fait même les fiches détectées comme "erreurs" car hors format sont bien des fiches à décompter, c'est-à-dire qu'un simple décompte général par dossier suffirait.

    Pour ne pas vous embêter plus j'ai tenté d'intégrer à la place
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    ( Get-ChildItem c:\"."| Measure-Object ).Count
    mais ça me donne 11 à chaque résultat...

  18. #18
    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
    Je vais modifier mais que faire si le dossier n'a que des fichiers en erreur ?

    Juste ceci ? : EPHE_CWG_JY_224_000399 : Image/jpeg, nombre total de vues 2

  19. #19
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 12
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Je vais modifier mais que faire si le dossier n'a que des fichiers en erreur ?

    Juste ceci ? : EPHE_CWG_JY_224_000399 : Image/jpeg, nombre total de vues 2
    Oui tout à fait, car j'aurais de toute manière besoin de compléter manuellement les fichiers en erreur dans la description finale (il s'agit souvent de fichiers hors format, du type photo ou enveloppes dont je ne peux définir des valeurs stables). Encore merci pour votre retour.

  20. #20
    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
    V3
    Code powershell : 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
    $dossier = "."
     
    $format = @(
                [PSCustomObject]@{
                    Format = 'A4'
                    minX = 2400
                    maxX = 2600
                    minY = 2900
                    maxY = 3200
                }
                ,
                [PSCustomObject]@{
                    Format = 'A5'
                    minX = 1400
                    maxX = 1700
                    minY = 2000
                    maxY = 2500
                }
                ,
                [PSCustomObject]@{
                    Format = 'A6'
                    minX = 1200
                    maxX = 1600
                    minY = 900
                    maxY = 1330
                }
            )
     
    #########################################################################
     
    [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
     
    $resultOK = @()
    $resultKO = @()
    $format | Add-Member -NotePropertyMembers @{nombre=0}
     
    $folders = Get-ChildItem -LiteralPath $dossier -Directory -Force
     
    foreach($folder in $folders)
    {
        Write-Host "Analyse du dossier `"${folder}`""
        $format | ForEach-Object {$_.nombre = 0}
     
        $files = Get-ChildItem -Path "$($folder.FullName)\*.jpg" -File -Recurse -Force
        if ($files)
        {
            $files | ForEach-Object {
                $fileOk = $false
                try
                {
                    $img = [System.Drawing.Image]::FromFile($_)
                    $x = $img.Width
                    $y = $img.Height
                    $img.Dispose()
                    $fileOk = $format | Where-Object {$x -ge $_.minX -and $x -le $_.maxX -and $y -ge $_.minY -and $y -le $_.maxY} | ForEach-Object {$_.nombre += 1;$true}
                }
                catch
                {}
                if (!$fileOk)
                {
                    $resultKO += $_.FullName
                }
            }
     
     
            $resultDossier = $format | Where-Object {$_.nombre -ne 0} | ForEach-Object {"$($_.nombre) fiche$(if($_.nombre -gt 1){"s"}) papier $($_.Format)"}
     
            $strNbrOk = if (@($resultDossier).Count -eq 1)
            {
                "${resultDossier}"
            }
            elseif ($resultDossier.Count -gt 1)
            {
                "$(($resultDossier | Select-Object -SkipLast 1) -join ", ") et $($resultDossier[-1])"
            }
     
            $resultOK += "$($folder.Name) : $(if($strNbrOk){"${strNbrOk}. "})Image/jpeg, nombre total de vues $(@($files).Count)"
        }
    }
     
    $resultOK | Set-Content -LiteralPath "${dossier}\Resultat.txt" -Encoding utf8
    $resultKO | Set-Content -LiteralPath "${dossier}\Erreur.txt" -Encoding utf8
     
    Write-Host "`n`nfin"
    Read-Host

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Erreur dans l'execution d'un script
    Par apersonnat dans le forum Administration
    Réponses: 2
    Dernier message: 14/08/2008, 14h50
  2. Erreur dans l'exécution d'une requête
    Par ouinih dans le forum SQL
    Réponses: 3
    Dernier message: 11/06/2008, 23h32
  3. cron erreur dans l'exécution d'un script
    Par Carhod dans le forum Unix
    Réponses: 1
    Dernier message: 31/01/2008, 13h23
  4. [OK] Erreur dans l'exécution d'un code de macro.
    Par Funcky222 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/09/2007, 21h35
  5. erreur dans l'exécution de Dlookup
    Par jessy212 dans le forum Access
    Réponses: 3
    Dernier message: 30/08/2006, 13h58

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