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 :

Renommer et déplacer à la volée des PDF [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    432
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 432
    Par défaut Renommer et déplacer à la volée des PDF
    Bonjour,

    je suis débutant en script Batch, et je sollicite votre aide.

    Donc dans la société nous avons un scanner qui scanne a la volé dans un dossier partagé, cependant j'ai deux option "Multi" ou "simple".

    Le "Multi" créer un PDF par paquet, met toute les pages dans le PDF, bien sur chaque PDF est nommé aléatoirement.

    Sinon le mode simple me créer un seul PDF par fichier, seulement il me créer par paquet un dossier nommé aléatoirement et me met tout les fichier du paquet, en les nommant "fichier1" "fichier2" "fichier3" .....

    et donc mon besoin est d'avoir tout mes scanner avec un nom différent dans un seul fichier. Evidemment si je fait un simple move du fichier il va y avoir plein de doublon qui serons écrasé et je ne peux pas me permettre d'en perdre un seul.

    Vous allez me dire configure ton scanner.... déjà fait je ne peux pas faire mieux la société de maintenant a déjà envoyé une poignée de technicien et rien n'y fais. bref nous ne somme pas la pour parler de mon scanner.

    Donc je désire faire me mettre dans un dossier et parcourir tout les dossier enfant, renommer déplacer tout les PDF dans le dossier parent en les renommant aléatoirement, puis si le dossier est vide le supprimer.

    Donc je voulais faire un savant mélange avec la fonction move et une variable date qui donnerai dans le nom les secondes, mais le script est trop rapide donc il va y avoir des doublons.

    j'ai donc trouvé ce script qui renomme a la volé de maniere plus ou moins aléatoires tout les pdf d'un dossier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    set i=0 
    for /f "delims=" %%a in ('dir "*.pdf" /b') do call :commande "%%a" 
    set i= 
    ::
    :commande 
    set valeur=%1 
    set /a i=%i%+1 
    ren %valeur% newbl%i%.pdf
    Dans un premier temps je désire comprendre un peu mieux ce code par exemple je ne comprend pas "/f" ou "%%a" je sais que "%qqc" est une variable au même titre qu'en php "$qqc".

    Ensuite j'aimerai faire une récursivité c'est a dire ne plus renommé a la volé les fichier ou le script se trouve mais donner un chemin de dossier parent et effectuer le renommage que dans les dossier enfants.

    Puis déplacer tout les PDF renommer dans le dossier parent (je pense que déplacer et renommer en même temps est plus intelligent et plus pratique non ?).

    et enfin supprimer les dossier enfants vide.


    Je vous remercie par avance de l'aide que vous pouvez m'apporter.

    Bonne soirée

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    432
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 432
    Par défaut
    Bonjour,
    je vois qu'il n'y a pas foule pour répondre j'en suis bien atristé.

    Cependant j'avance mais je rencontre toujorus quelque difficulté que je ne comprend pas
    Actuellement mon code est celui la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    set i=0 
    for /f "delims=" %%a in ('dir /s "C:\DangerTestEnCour\Parents\*.pdf" /b') do call :commande "%%a" 
    set i= 
    ::
    :commande 
    set valeur=%1 
    set /a i=%i%+1 
    
    move %valeur% "C:\DangerTestEnCour\Parents\newbl%i%.pdf"
    En gros le script est censé être a la racine mais pour des soucis de sécurité j'ai descendu d'un dossier. Bref le programme parcours tout les sous dossier du dossier parent, et déplace et renomme tout les PDF.
    Comme vous pouvez le voir une variable incrémenté donne un nom différent a chaque fichier. Et me déplace les PDF dans le dossier parent.

    J'ai fait un test sur 20 PDF dans 2 sous dossier enfant différent, et je me retrouve la vous allez rire, avec 19 PDF dans le dossier parent...
    Le 20eme est a coté de mon script a la racine fictive "DangerTestEnCour"

    C'est une chose que je ne comprend pas, Pourquoi ? pouvez vous m'aider ?
    merci d'avance pour vos lumières

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 69
    Par défaut
    Salut,
    te manque pas un : goto :eof, à la fin de ta fonction ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    432
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 432
    Par défaut
    Bonjour,

    C'est une tres bonne question, je sais que j'ai un souci de fin de boucle mais je ne sais pas comme délimiter das le code se qui appartient la boucle ou non

    Par exepmle dans mon code qui fonctionne a peu pret
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    set i=
    set /P i= < C:\DangerTestEnCour\compteur.txt
    
    for /f "delims=" %%a in ('dir /s "C:\DangerTestEnCour\Parents\*.pdf" /b') do call :commande "%%a" 
    
    ::
    :commande 
    set valeur=%1 
    set /a i=%i%+1 
    
    move %valeur% "C:\DangerTestEnCour\Parents\newbl%i%.pdf"
    
    del "C:\DangerTestEnCour\compteur.txt"
    echo %i% > "C:\DangerTestEnCour\compteur.txt"
    j'aimerai détruire et créer qu'une seul fois mon fichier compteur.txt
    cependant il le fait a chaque boucle, de plus il ne renomme pas que les fichier dans les dossiers. une fois, les fichier déplacé et renommer, il s'attaque au fichier qui étais dans les dossiers en gros il les renommes deux fois.

    Bon cela fonctionne je pourrai fermer le post mais peut être auriez vous des idée pour régler les petits défauts.

  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
    Déjà tu utilises un move alors que tu ne fais que renommer des fichiers, et comme en plus, tu utilises le même dossier, forcément, les fichiers déjà traités le seront de nouveau à chaque exécution de ton script. Si tu souhaites conserver tes fichiers dans le dossier "parents" et pour éviter ce "renommage" cyclique, tu peux par exemple filtrer la sortie de dir avec findstr, ce qui donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "tokens=*" %%a in ('dir /s /b /a-d "c:\dangertestencour\parents\*.pdf" ^| findstr /ivr "\\newbl[0-9]*\.pdf"') do call :commande "%%a"

    et puis tant qu'à faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    set i=
    set /p i=<C:\DangerTestEnCour\compteur.txt
    for /f "tokens=*" %%a in ('dir /s /b /a-d "c:\dangertestencour\parents\*.pdf" ^| findstr /ivr "\\newbl[0-9]*\.pdf"') do call :commande "%%a"
    (echo %i%)>C:\DangerTestEnCour\compteur.txt
    goto :eof
    
    :commande
    set /a i+=1
    ren "%~1" "newbl%i%.pdf"
    goto :eof
    après bien sûr, il convient de faire en sorte que le script puisse être en mesure de gérer toutes les situations possibles, et puis aussi tu peux te passer de compteur.txt en faisant un simple comptage, et cetera.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    432
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 432
    Par défaut
    Bonjour minnesota,

    Un grand merci c'est exactement cela que je voulais. Néanmoins j'ai remit ma commande move car j'ai besoin de déplacer les PDF qui sont trouver des dossiers enfant dans parents et les déplacer justement hors des enfants mais toujours dans parent.

    Bref cela fonctionne.
    Je suis toute fois curieux de l'idée de se passer de compteur.txt qu'avez vous en tête ? Il faut savoir que des nouveau PDF arrive toute la journée se qui fait que ce script exécuter mettons toutes les heures risque fort de se retrouver avec les PDF renommé l'heure d'avant, qui n'ont pas encore été traiter (oui il y a un autre traitement avec intervention humaine).

    D'ou mon idée de compteur afin de ne pas perdre le fils du décompte et ainsi éviter d'utiliser deux fois le même numéro.

    je me permet toutefois de revenir sur le code car j'ai un peu de mal a saisir les étape de certaine chose, par exemple se qui me dérange le plus c'est la boucle si on compare avec de l'algorithmie, on ouvre notre boucle avec Tant que, puis on la ferme avec Fin Tant que. Tout se qui est dedans appartiens a la boucle au delà c'est autre chose.

    La j'ai un peu de mal a cerner son comportement avec les deux goto puis le commande, pouvez vous m'éclairer svp?

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

Discussions similaires

  1. [XL-2007] Macro pour renommer et déplacer un pdf
    Par gemxtrust dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/12/2009, 12h40
  2. [FPDF] renommer des PDF par lot selon leurs contenus
    Par Gabor3D dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 06/01/2008, 12h55
  3. renommer des PDF
    Par frederic.go dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 12/07/2006, 13h34
  4. Liens pour apprendre à créer des PDF
    Par pmboutteau dans le forum Autres langages
    Réponses: 6
    Dernier message: 20/09/2005, 18h16
  5. [FPDF] Rechercher dans des pdf
    Par snike dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 09/09/2005, 09h58

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