Insérer un et même dossier dans plusieurs dossiers auto.
Fermébrucine Messages postés 18281 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 décembre 2024 - 4 août 2023 à 18:30
- Créer plusieurs dossiers en même temps
- Renommer plusieurs fichiers en même temps - Guide
- Créer un compte gmail - Guide
- Créer un compte google - Guide
- Comment créer un groupe whatsapp - Guide
- Blocage agriculteur carte en temps réel - Accueil - Transports & Cartes
12 réponses
1 août 2023 à 16:33
Bonjour,
Sur le plan du principe ça ne doit pas créer de problème particulier en batch avec une boucle FOR qui crée un sous-dossier dans chacun des dossiers, mais je ne suis pas sûr de bien comprendre la demande.
Tu veux créer donc au rang 3 4 dossiers dans chacun des dossiers, ils sont eux-mêmes vides et identiques pour chacun des dossiers de rang 2?
On serait plus productif du script si tu donnais un exemple de cette arborescence, chemin du dossier source qui s'appelle "Fiches Clients" si j'ai bien compris, et nom bidon de 2 clients et des 4 sous-dossiers concernés.
Bonjour,
Déjà, merci pour l'intérêt porté à ma demande, et oui, je ne m'exprime pas forcément en langage informatique ...
Ceci dit, par exemple
Rang 1 Fiches Clients
Rang 2 Client A
Rang 3 Messagerie
Rang 3 Route
Rang 3 Logistique
Rang 3 Affrètement
Rang 2 Client B
Rang 3 Messagerie
Rang 3 Route
Rang 3 Logistique
Rang 3 Affrètement
Etc ...
Si les rangs 1 et 2 sont bien créés dans mon arborescence ce sont les rangs 3 que je voudrais insérer de manière "automatisées" dans les fichiers du Rang 2 afin de ne pas reproduire 1940 collés !
Et effectivement, ils sont vides.
Est plus clair ?
Merci de ton aide,
2 août 2023 à 11:41
Bonjour,
J'ai remplacé les espaces par des tirets et supprimé l'accent aigu, les résultats avec des caractères spéciaux sont souvent imprévisibles et j'ai assumé que le dossier au rang 1 se situait à la racine de E:\
Je suppose que les dossiers de rang 2 existent déjà.
@echo off FOR /F %%a in ('dir /a:d /b /s "E:\Fiches_Clients"') DO SET CHEMIN=%%a & CALL :PROCESS GOTO EOF :PROCESS SET CHEMIN=%CHEMIN:~0,-1% MD %CHEMIN%\Messagerie MD %CHEMIN%\Route MD %CHEMIN%\Logistique MD %CHEMIN%\Affretement exit /b :EOF
Ouah, MERCI, la racine est "Y", bon ça je peux m'en débrouiller ...
Mais, cet encodage, je dois le placer via "Invite de Commandes" ?
Merci de ton retour et du temps consacré.
2 août 2023 à 14:38
Tu adaptes bien sûr ton chemin en conséquence, tu copies ce qui précède dans un nouveau fichier texte par exemple sur le bureau, tu le renommes cequejeveux.cmd et tu cliques dessus.
Si tu adoptes le tiret, il faut bien sûr être cohérent et rebaptiser le dossier Fiches_Clients.
Fichier texte créé sur bureau et nommé ce quejeveux.cmd / copié/collé exécuté avec changement de racine de E:\ par Y:\
Mais, je dois bugger quelque part, j'ai mis Y en racine, mais le vrai nom du serveur est:
commercial (\\192.168.2.XX)(Y:)
Y a t-il un rapport ?
2 août 2023 à 15:36
Je ne peux pas tester, je suis retraité, plus de PC en réseau.
Même si ton lecteur est mappé par une lettre Y, tu ne peux pas l'adresser directement à la ligne de commande.
Si tant est que le nom du PC à atteindre soit "commercial", essayer en qualifiant totalement le chemin réseau sous la forme \\commercial\ ou \\192.168.2.xx\ avant le chemin du dossier cible sur ce lecteur.
Il va probablement falloir si ça ne suffit pas s'adresser à ce lecteur via une commande préalable NET USE, nom d'utilisateur et mot de passe à la clé:
https://ss64.com/nt/net-use.html
2 août 2023 à 15:49
Si tu as un accès physique au PC en question, plutôt que de tester le paramétrage jusqu'à ce qu'il soit fonctionnel, tu as plus vite fait de copier le script sur le poste cible via une clé USB ou bien par prise de contrôle à distance et de l'exécuter localement.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question... Effectivement, j'étais dans la même réflexion après quelques tentatives infructueuses, effectivement la clé USB peut être une solution rapide (teste demain, je n'en ai pas sur moi), et si je passais directement par :
C:\Users\c.ch...\OneDrive - IMANY\Documents
J'imagine qu'après IMANY\Documents, je devrai rajouter \Fichiers_Clients ? Et hop ?
BRAVO l'artiste, ça marche avec USB !
Et un grand MERCI pour le temps gagné.
Peut-être à bientôt,
2 août 2023 à 17:38
Parfait et tant mieux, il n'y a rien de plus pénible que les autorisations réseau à la ligne de commande, surtout quand on ne peut pas tester...
Bonjour brucine, super, le transfert et la création des sous-dossiers ont fonctionné.
Du coup nouvelle interrogation pour automatiser la question suivante: On va dire,
j'ai 2 dossiers A & B,
A-Rang 1- "Grilles"
Rang 2 - une 50taine de sous-dossiers (clients) dans lesquelles se trouvent des FICHIERS de grilles de tarifs
B-Rang 1- Le "Dossiers_Clients" que je viens de créer avec le nom des client + les sous-dossiers ...
Donc, plutôt que de copié/collé les fichiers par client dans le dossier "Grille" pour les transférer dans le "Dossiers_Clients" et le sous_dossiers correspondant au nom du client, je souhaiterais que le transfert se fasse directement.
Pour cela, on ne prendra qu'une seule racine D:\ et bien sûr les noms des clients seront orthographiés identiquement d'un fichier à l'autre pour correspondance.
Est-ce possible ?
Merci de aux cellules grises pour le travail fourni !
3 août 2023 à 17:00
Bonjour,
à nouveau une question préalable, je ne suis pas sûr d'avoir bien compris l'arborescence des rangs.
Il s'agit bien (j'ai mis des photos en guise de tarifs) de déplacer les fichiers du bas à la racine du nom correspondant en haut en vrac (sans créer un sous-dossier Tarifs) et selon cette structure, à corriger au besoin?
3 août 2023 à 17:40
Si c'est le cas, ça donne ça, tu remplaceras E: par D:
Détruire ensuite le dossier source vide soit à la main soit par une syntaxe
RD /S /Q
@echo off FOR /F %%a in ('dir /a:d /b /s "E:\Grilles"') DO SET GRILLES=%%a & CALL :PROCESS1 GOTO EOF :PROCESS1 SET GRILLES=%GRILLES:~0,-1% SET CLIENT=%GRILLES:~11% CALL :PROCESS2 exit /b :PROCESS2 MOVE %GRILLES%\*.* E:\Dossiers_Clients\%CLIENT% exit /b :EOF
Bonjour brucine,
Cette collaboration est super !
Oui, je pense que tu as compris ma demande et l'arborescence des rangs semble correspondre.
J'imagine que je dois passer par un fichier texte pour exécuter cette fonction ?
Par contre, je suis ignorant sur: "détruire le fichier soit par une syntaxe
RD /S /Q"
Je vais faire un test à petite échelle dans la journée.
Bien sûr, je te tiens au courant.
Je vais faire un test à petite échelle pour voir si cela fonctionne.
A tout à l'heure,
4 août 2023 à 10:06
Bonjour,
Non, c'est un script exécutable toto.cmd, comme précédemment.
Pour tester sans casse (simple simulation) utilise un deuxième script modifié comme suit:
@echo off FOR /F %%a in ('dir /a:d /b /s "E:\Grilles"') DO SET GRILLES=%%a & CALL :PROCESS1 GOTO EOF :PROCESS1 SET GRILLES=%GRILLES:~0,-1% SET CLIENT=%GRILLES:~11% CALL :PROCESS2 exit /b :PROCESS2 rem MOVE %GRILLES%\*.* E:\Dossiers_Clients\%CLIENT% ROBOCOPY /L /MOV /NP /NS /NJH /NJS "%GRILLES%" "E:\Dossiers_Clients\%CLIENT%" pause exit /b :EOF
La commande ROBOCOPY te donnera une sortie écran des fichiers "copiés" et de leur emplacement sans aucune action.
Je suppose qu'à la fin de l'opération le dossier E:\Grilles et ses sous-dossiers sont devenus inutiles; soit je les vire à la souris à la main, soit j'écris juste avant :EOF
RD /S /Q "E:\Grilles"
Finalement, je reviens sur ce que j'ai validé, car ce n'est pas tout à fait cela ...
EN PJ, mon arborescence de FICHIERS Excel de grilles de tarifs (finalement ce ne sont pas des sous-dossiers ou le dossier principal serait le nom du client).
L'idée est de faire correspondre un fichier Excel portant par exemple le nom "test 2023" avec pour racine D:\"Grilles", dans un dossier "test 2023" (même nom) ayant pour racine D:\"Doccisers_Clients".
Autrement dit faire, rentrer un fichier dans un dossier du même nom ayant la même racine.
Est-ce plus clair et réalisable ?
Merci pour tous ces méninges en ébullition.
4 août 2023 à 10:50
Ce qui se conçoit bien s'énonce clairement...
Il faudra se débarrasser de l'extension de fichier (.xls) dans le nom de dossier, j'émets à nouveau des réserves sur les espaces dans les noms de fichiers (et donc de dossiers); je suppose que le nouveau dossier doit avoir le nom complet du fichier source, pas une partie qui pourrait être commune (2023) sans quoi ça va devenir infect, et que les dossiers cibles n'existent pas préalablement.
Attention aussi si les noms de fichiers sont très longs, on est susceptible de se faire jeter par une trop grande longueur du chemin d'accès au dossier puis au fichier cible.
Avant de recommencer une fois supplémentaire, comme ça?
Avant:
Après:
4 août 2023 à 10:52
J'ai enlevé 3 fichiers entre "avant" et "après" pour gagner du temps, mais ce qui ne change rien à la question, si je ne l'avais pas fait, on les aurait retrouvés "après".
... Nicolas Boileau !
En pièce jointe, je pense que nous parlerons alors le même langage.
Est-ce que c'est mieux ?
4 août 2023 à 11:44
Toujours pas certain.
Par exemple le dossier ALU ET PLASTIQUE 2023 existe préalablement dans Dossiers_Clients (quelle drôle d'idée...) ou il faut que je l'y crée avant d'y déplacer le fichier ALU ET PLASTIQUE 2023.xls qui se trouve dans le dossier Grilles et qui a exactement le même nom?
Question subsidiaire qui a son importance et qu'on ne voit pas puisqu'on ne voit pas les extensions, on en aura besoin pour faire le ménage, ce sont bien tous des fichiers xls avec une ancienne version Excel, pas xlsx?
Alors pour dire vrai, je vais changer préalablement le nom des fichiers .xls pour qu'ils correspondent aux dossiers clients, dans le Dossiers_Clients.
Donc PAS BESOIN DE LE CREER.
Tous les noms des clients existent DEJA dans le dossier "Dossiers_Clients".
Et oui ancienne version Excel, donc .xls pour les fichiers.
4 août 2023 à 13:07
ça, si c'est la version définitive, c'est pas compliqué.
@echo off FOR /F %%a in ('dir /b "E:\Grilles"') DO SET FICHIER=%%a & CALL :PROCESS1 pause GOTO EOF :PROCESS1 SET FICHIER=%FICHIER:~0,-1% SET DOSSIER=%FICHIER:~0,-4% rem MOVE E:\Grilles\%FICHIER% E:\Dossiers_Clients\%DOSSIER% XCOPY /L /I /F "E:\Grilles\%FICHIER%" "E:\Dossiers_Clients\%DOSSIER%" exit /b :EOF
Les lignes pause, XCOPY et le préfixe rem sont pour goûter à l'écran sans rien faire.
Si le résultat convient, enlever pause et supprimer la ligne XCOPY (ou bien enlever le rem devant MOVE et le mettre devant XCOPY).
Test effectué sur une petite échelle.
Résultat: MAGIQUE !
J'étends à l'ensemble des Fichiers/Dossiers, si j'ai le temps dans la journée.
Un grand MERCI pour cet accompagnement ...
"C'est pas compliqué" dit-brucine ... Mais quand même !!!
A bientôt peut-être ...
4 août 2023 à 18:30
J'ai oublié qu'il y a avait des espaces dans tes noms de fichiers, si tu ne veux pas avoir d'ennuis avec la commande MOVE, remplace la par:
MOVE "E:\Grilles\%FICHIER%" "E:\Dossiers_Clients\%DOSSIER%"
et enlève bien sûr le rem avant de l'exécuter