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 :

tri de photos


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut tri de photos
    Bonjour,

    J'ai un grand nombre de photos à trier. Hélas mon batch ne fonctionne pas comme je le désire.

    Il n'y a qu'une image qui est traitée et en plus elle ne va pas dans le bon répertoire.

    Je ne sais pas comment lier la boucle for avec la création de mon fichier dimensions.vbs

    Pourriez vous m'aider et m'expliquer ce qui ne va pas.

    Je vous remercie.


    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
    @echo off
    rem récupération du chemin
    set [REP]=%cd%
    
    rem création repertoires
    mkdir "%[REP]%\ok"
    mkdir "%[REP]%\erreur"
    
    rem récupération du nom des photos
    dir /b *.jpg >> nomPhoto.txt
    
    FOR /F %%i IN (nomPhoto.txt) DO set nom=%%i
    
    rem création vbs qui sera complété 
    echo stRep="%[REP]%" >> .\dimensions.vbs
    echo stFichier ="%nom%" >> .\dimensions.vbs 
    echo Set oShell = CreateObject("Shell.Application") >> .\dimensions.vbs
    echo Set oFolder = oShell.Namespace(stRep) >> .\dimensions.vbs
    echo Set oFichier = oFolder.Items.Item(stFichier) >> .\dimensions.vbs
    rem 'Affiche les propriétés étendues du fichier
    echo Wscript.Echo  "[" ^& 26 ^&  "] " ^& oFolder.GetDetailsOf(oFolder.Items, 26  ) ^& " : " ^& oFolder.GetDetailsOf(oFichier, 26) >> .\dimensions.vbs
    
    rem test les dimensions et deplacement fichiers
    set valeur=[26] Dimensions : 283 x 377
    cscript dimensions.vbs
    if "%valeur%"=="[26] Dimensions : 283 x 377" copy %nom% "%[REP]%\ok"
    if not "%valeur%"=="[26] Dimensions : 283 x 377" copy %nom% "%[REP]%\erreur"
    
    rem suppression des fichiers tempo
    del .\dimensions.vbs
    del .\nomphoto.txt

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    Bonjour,

    J'ai effectué quelques modifications de mon code mais ce n'est pas une grande réussite, cependant voici ce qui fonctionne.

    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
    @echo off
    rem réupération du chemin
    set [REP]=%cd%
    
    rem creation repertoires
    rem mkdir "%[REP]%\ok"
    rem mkdir "%[REP]%\erreur"
    
    rem récupération du nom des photos
    dir /b *.jpg >> nomPhoto.txt
    
    FOR /F %%i IN (nomPhoto.txt) DO set nom=%%i && call :traitement
    goto :EOF
    
    :traitement
    
    rem creation vbs
    echo stRep="%[REP]%" >> .\Dimensions.vbs
    echo stFichier ="%nom%" >> .\Dimensions.vbs
    echo Set oShell = CreateObject^("Shell.Application"^) >> .\Dimensions.vbs
    echo Set oFolder = oShell.Namespace^(stRep^) >> .\Dimensions.vbs
    echo Set oFichier = oFolder.Items.Item^(stFichier^) >> .\Dimensions.vbs
    echo Wscript.Echo  "[" ^& 26 ^&  "] " ^& oFolder.GetDetailsOf^(oFolder.Items, 26  ^) ^& " : " ^& oFolder.GetDetailsOf^(oFichier, 26^) >> .\Dimensions.vbs
    Je voulais que chaque fichier se nomme %nom%.vbs mais je ne sais pas
    pourquoi mais les fichiers ne sont pas créés mais si je lui donne un autre nom
    alors ils sont tous dans le même (ce qui est normal puisque tout est orienté
    vers le même fichier).

    Comment obtenir le résultat que j'attends ?
    Merci pour votre aide.

  3. #3
    Invité de passage
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1
    Par défaut
    Bonjour,

    Je débute en scripts batch, et je ne sais pas (encore?) à quoi servent Wscript et cscript, ni comment vous allez obtenir la dimension de l'image (cscript peut être), donc n'hésitez pas à me donner quelques pistes, ça a l'air intéressant

    Pour le problème de la création des fichiers, est-ce qu'il ne manque pas simplement des guillemets autour du nom de fichier ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    copy "%nom%" "%[REP]%\ok"
    Bon, dans ce cas, on obtient le fichier [ok/image.jpg]. On peut modifier le code de plusieurs façons pour obtenir le fichier [ok/image.vbs] avec l'extension vbs voulue. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    copy "%nom%" "%[REP]%\ok\%nom:jpg=vbs%"
    Voilà, j'ai peut-être mal compris le problème, mais j'ai testé le code et ma solution chez moi, ça marche

    En tout cas, merci, je suis tombé sur le post par hasard, et c'était très instructif ! Je crois que je vais bientôt trier mes photos

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    Bonjour et merci de votre réponse

    Je pense que je me suis mal exprimé.

    Voici ce que je aimerai faire:

    recuperer le chemin où le batch est lancé

    créer mes repertoires pour le tri
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mkdir "%[REP]%\ok"
    mkdir "%[REP]%\erreur"
    recuperer le nom de chaque photo dans un fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dir /b *.jpg >> nomPhoto.txt
    mettre le nom de chaque photo dans une variable pour l'utiliser dans la création d'un script vbs .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FOR /F %%i IN (nomPhoto.txt) DO set nom=%%i && call :traitement
    goto :EOF

    Maintenant la création des fichiers vbs (MERCI DhooGee, je ne voyais pas qu'il manquait les guillemettes).

    Pour info cscript permet de lancer un script vbs en mode console.
    http://tahe.developpez.com/web/vbscript/?page=sommaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    :traitement
    
    echo stRep="%[REP]%" >> .\%nom%.vbs"
    echo stFichier ="%nom%" >> .\%nom%.vbs"
    echo Set oShell = CreateObject^("Shell.Application"^) >> .\%nom%.vbs"
    echo Set oFolder = oShell.Namespace^(stRep^) >> .\%nom%.vbs"
    echo Set oFichier = oFolder.Items.Item^(stFichier^) >> .\%nom%.vbs"
    echo Wscript.Echo  "[" ^& 26 ^&  "] " ^& oFolder.GetDetailsOf^(oFolder.Items, 26  ^) ^& " : " ^& oFolder.GetDetailsOf^(oFichier, 26^) >> .\%nom%.vbs"
    
    cscript %nom%.vbs"
    maintenant je ne vois pas comment faire pour recuperer le resultat dans une variable
    afin de le comparer et ensuite selon le résultat déplacer la photo dans le bon répertoire.

    plus un nettoyage des fichiers temporaires.

    Merci de votre aide.

  5. #5
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Salut,

    L'idéal serait de tout faire en vbs, tu gagnerais en rapidité, car le chargement du vbs depuis cmd ralentit l'exécution de ce dernier.

    Sinon, en me basant sur tes besoins et ton approche, voici un script de tri fonctionnel dont l'analyse te permettra de répondre à tes interrogations. Il faut le placer dans le dossier racine contenant tes photos, puis le lancer.

    Il est fourni tel quel et sans garantie, ça va de soi.


    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
    @echo off
    set "ThisCmdPath=%~dp0"
    set "ExtensionImage=*.jpg"
    set "NbOK=0"
    set "NbNONE=0"
    set "NbSUM=0"
    if not exist "%ThisCmdPath%NoInfo\*" md "%ThisCmdPath%NoInfo"
    echo.
    :vbs
    (
    echo Set objFSO = CreateObject^("Scripting.FileSystemObject"^)
    echo if ^(WScript.Arguments.Unnamed.Count^<=0^) Then WScript.Quit ^(1^)
    echo If ^(NOT objFSO.FileExists^(WScript.Arguments.Item^(0^)^)^) Then WScript.Quit ^(1^)
    echo   Set objFile = objFSO.GetFile^(WScript.Arguments.Item^(0^)^)
    echo   set objShell = CreateObject^("shell.application"^)
    echo   set objFolder = objShell.NameSpace^(objFSO.GetParentFolderName^(objFile^)^)
    echo   set objFolderItem = objFolder.ParseName^(objFSO.GetFileName^(objFile^)^)
    echo   WScript.Echo objFolder.GetDetailsOf^(objFolderItem, 26^)
    echo WScript.Quit ^(0^)
    echo.)> %temp%\GetDim.vbs
    
    for /f "tokens=*" %%i in ('dir /a-d /b /l %ThisCmdPath%%ExtensionImage%') do call :MoveImg "%ThisCmdPath%%%~i"
    Title StatGOOD [%NbOK%/%NbSUM%] - FIN
    pause
    goto :eof
    
    :MoveImg
    Title StatGOOD [%NbOK%/%NbSUM%] - ...
    set /a NbSUM+=1
    echo Moving "%~nx1"...
    set "ImgDim="
    set "NewImgPath=" 
    for /f "tokens=*" %%i in ('cscript //Nologo "%temp%\GetDim.vbs" "%~1"') do set "ImgDim=%%i"
    if "%ImgDim%"=="" move "%~1" %ThisCmdPath%NoInfo& set /a NbNONE+=1& goto :eof
    set "NewImgPath=%ThisCmdPath%D%ImgDim: =%\"
    if not exist "%NewImgPath%*" md "%NewImgPath%"
    move "%~1" %NewImgPath%
    set /a NbOK+=1
    goto :eof

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    Bonjour,

    Merci minnesota pour ton aide.

    Je voudrais bien faire un vbs mais hélas je ne connais pas ce langage, j'ai juste récuperé
    un exemple et j'ai gardé que ce qui me convenais.
    C'est pour cela que je fais un batch.

    J'ai copié ta solution que j'ai lancé tel que et j'ai obtenu le message d'erreur suivant:
    Le chemin d'accès spécifié est introuvable.

    quand je mets dans une console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set "ThisCmdPath=%~dp0"
    echo %ThisCmdPath%
    j'obtiens: %~dp0

    j'ai donc remplacé %~dp0 par "%cd%"

    ensuite je me suis aperçu que le répertoire créé n'était pas un sous répertoire de %ThisCmdPath%

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if not exist "%ThisCmdPath%NoInfo\*" md "%ThisCmdPath%NoInfo"
    j'ai donc ajouté un backslash "\" pour remedier à ce souci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if not exist "%ThisCmdPath%\NoInfo\*" md "%ThisCmdPath%\NoInfo"
    ainsi qu'ici et des guillemets ""
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for /f "tokens=*" %%i in ('dir /a-d /b /l "%ThisCmdPath%\%ExtensionImage%"') do call :MoveImg "%ThisCmdPath%\%%~i"
    ensuite j'ai relancé le script et je me suis demandé : où sont les photos ?

    J'ai vu qu'elles étaient déplacées dans le répertoire parent.
    Alors j'ai ajouté ici aussi un "\".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set "NewImgPath=%ThisCmdPath%\D%ImgDim: =%\"
    voici donc le code après les modifications indiquées:
    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
    @echo off
    set "ThisCmdPath=%cd%
    set "ExtensionImage=*.jpg"
    set "NbOK=0"
    set "NbNONE=0"
    set "NbSUM=0"
    if not exist "%ThisCmdPath%\NoInfo\*" md "%ThisCmdPath%\NoInfo"
    echo.
    :vbs
    (
    echo Set objFSO = CreateObject^("Scripting.FileSystemObject"^)
    echo if ^(WScript.Arguments.Unnamed.Count^<=0^) Then WScript.Quit ^(1^)
    echo If ^(NOT objFSO.FileExists^(WScript.Arguments.Item^(0^)^)^) Then WScript.Quit ^(1^)
    echo   Set objFile = objFSO.GetFile^(WScript.Arguments.Item^(0^)^)
    echo   set objShell = CreateObject^("shell.application"^)
    echo   set objFolder = objShell.NameSpace^(objFSO.GetParentFolderName^(objFile^)^)
    echo   set objFolderItem = objFolder.ParseName^(objFSO.GetFileName^(objFile^)^)
    echo   WScript.Echo objFolder.GetDetailsOf^(objFolderItem, 26^)
    echo WScript.Quit ^(0^)
    echo.)> %temp%\GetDim.vbs
    
    for /f "tokens=*" %%i in ('dir /a-d /b /l "%ThisCmdPath%\%ExtensionImage%"') do call :MoveImg "%ThisCmdPath%\%%~i"
    Title StatGOOD [%NbOK%/%NbSUM%] - FIN
    pause
    goto :eof
    
    :MoveImg
    Title StatGOOD [%NbOK%/%NbSUM%] - ...
    set /a NbSUM+=1
    echo Moving "%~nx1"...
    set "ImgDim="
    set "NewImgPath=" 
    for /f "tokens=*" %%i in ('cscript //Nologo "%temp%\GetDim.vbs" "%~1"') do set "ImgDim=%%i"
    if "%ImgDim%"=="" move "%~1" %ThisCmdPath%\NoInfo& set /a NbNONE+=1& goto :eof
    set "NewImgPath=%ThisCmdPath%\D%ImgDim: =%\"
    if not exist "%NewImgPath%*" md "%NewImgPath%"
    move "%~1" "%NewImgPath%"
    set /a NbOK+=1
    goto :eof


    Merci encore minnesota pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Galerie] Tri d'une galerie photos
    Par hindioriental dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 19/06/2014, 15h12
  2. Automatisation de tri photo
    Par kombab dans le forum Scripts/Batch
    Réponses: 12
    Dernier message: 13/03/2013, 14h19
  3. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  4. [POO] Tri de photo avec menu deroulant
    Par gueno dans le forum Langage
    Réponses: 6
    Dernier message: 21/03/2006, 18h29
  5. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25

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