Johann Posté(e) le 6 septembre 2016 Posté(e) le 6 septembre 2016 Bonjour à tous, Je cherche une solution pour modifier un texte dans un fichier .dwg sans ouvrir ce fichier. En effet, j'ai près de 1000 fichiers .dwg contenant le même texte erroné!Les ouvrir un par un pour changer ce texte est inconcevable. Pour l'instant mes recherches n'ont donné aucun résultat. Si quelqu'un connait un moyen, qu'il n'hésite pas! Merci à vous Citer
DenisHen Posté(e) le 6 septembre 2016 Posté(e) le 6 septembre 2016 Salut. As-tu pensé à SuperAutoScript ? Denis... Citer Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 6 septembre 2016 Posté(e) le 6 septembre 2016 Salut, À ma connaissance, on ne peut pas modifier un fichier sans l'ouvrir. On peut automatiser l'ouverture des fichiers (comme le propose DenisH). On peut aussi, depuis A2013, ouvrir les fichiers sans l'éditeur AutoCAD avec la console (voir ici). Mais dans tous les cas il faudra au moins une petite routine pour faire le rechercher/remplacer sans intervention de l'utilisateur (autrement dit, la commande RECHERCHER n'est pas "scriptable"). Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Sinan Posté(e) le 6 septembre 2016 Posté(e) le 6 septembre 2016 Bonjour, N'y a t'il pas une routine lisp "en boucle" qui permet sur un dessin purgé vide : -D'importer une xref-Ouvrir et modifier le xref-Sauver et quitter le dessin xref, donc revenir automatiquement au "dessin de base"-Supprimer le xref sur le "dessin de base" et ouvrir un autre xref. Une boucle qui l'exécute 1000 fois sur les fichiers erronés?(Un logiciel comme xnview pour fournir le nom des 1000 fichiers dwg et l'intégrer dans le code Lisp) Citer
(gile) Posté(e) le 6 septembre 2016 Posté(e) le 6 septembre 2016 On peut même faire plus performant en LISP (ou autre langage de programmation), en ouvrant les dessins "en mémoire", c'est à dire qu'on accède à la base de données des dessins sans les ouvrir dans l'éditeur. Mais ça demande d'écrire plus de code qu'une simple routine de remplacement de texte et je ne suis pas sûr que ce soit plus performant que la console AutoCAD avec un fichier .bat et un fichier .scr Exemple Fichier "Remplacer_toto_par_titi.scr" (il doit y avoir une espace ou un saut de ligne après _quit) qui remplace tous les textes "toto" par "titi". _-layer _unlock * (if (setq ss (ssget "_X" '((0 . "TEXT") (1 . "toto")))) (repeat (setq i (sslength ss)) (setq elst (entget (ssname ss (setq i (1- i))))) (entmod (subst (cons 1 "titi") '(1 . "toto") elst)))) _qsave _quit Fichier "Remplacer_toto_par_titi.bat" qui exécute le script ci-dessus sur tous les fichiers dwg de dossier "F:\Dessins test" et de ses sous-dossiers. echo off :: Chemin de la console AutoCAD (à modifier suivant la version utilisée) set accoreexe="C:\Program Files\Autodesk\AutoCAD 2016\accoreconsole.exe" :: Chemin du répertoire contentant les fichiers à traiter (à modifier) set "source=F:\Dessins test" :: Chemin du script à exécuter (à modifier) set script="F:\Batch\Remplacer_toto_par_titi.scr" FOR /f "delims=" %%f IN ('dir /b /s "%source%\*.dwg"') DO %accoreexe% /i "%%f" /s %script% :: Mettre en commentaire pour fermer automatiquement la console à la fin du traitement pause Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
JMBZ38 Posté(e) le 7 septembre 2016 Posté(e) le 7 septembre 2016 Salut, J'essaierai le magnifique Lisp de LEE MAC : Batch Find & Replace Text Citer
Johann Posté(e) le 7 septembre 2016 Auteur Posté(e) le 7 septembre 2016 Bonjour, Le lisp de LEE MAC : "Batch Find & Replace Text" est ce qu'il y a de plus simple et rapide.Tous mes fichiers sont corrigés!Merci à vous pour vos réponses. Johann Citer
JMBZ38 Posté(e) le 7 septembre 2016 Posté(e) le 7 septembre 2016 Content pour toi. Lee Mac propose d'autres lisp très efficaces pour éviter les tâches fastidieuses! Je teste actuellement "Updatetitleblock" qui permet de gérer toutes les informations des cartouches à partir d'un fichier csv. Plus la peine d'ouvrir les fichiers pour faire les modif, un tableau Excel et c'est parti pour les mises à jour !! Merci Lee MAC 1 Citer
Invité Bistoto Posté(e) le 21 juillet 2021 Posté(e) le 21 juillet 2021 Bonjour, Ceci fonctionnait très bien sur autocad 2016 mais pour autocad 2020 et 2021 ne fonctionne plus!! Auriez vous une solution? Fichier "Remplacer_toto_par_titi.scr" (il doit y avoir une espace ou un saut de ligne après _quit) qui remplace tous les textes "toto" par "titi". _-layer _unlock * (if (setq ss (ssget "_X" '((0 . "TEXT") (1 . "toto")))) (repeat (setq i (sslength ss)) (setq elst (entget (ssname ss (setq i (1- i))))) (entmod (subst (cons 1 "titi") '(1 . "toto") elst)))) _qsave _quit Fichier "Remplacer_toto_par_titi.bat" qui exécute le script ci-dessus sur tous les fichiers dwg de dossier "F:\Dessins test" et de ses sous-dossiers. echo off :: Chemin de la console AutoCAD (à modifier suivant la version utilisée) set accoreexe="C:\Program Files\Autodesk\AutoCAD 2016\accoreconsole.exe" :: Chemin du répertoire contentant les fichiers à traiter (à modifier) set "source=F:\Dessins test" :: Chemin du script à exécuter (à modifier) set script="F:\Batch\Remplacer_toto_par_titi.scr" FOR /f "delims=" %%f IN ('dir /b /s "%source%\*.dwg"') DO %accoreexe% /i "%%f" /s %script% :: Mettre en commentaire pour fermer automatiquement la console à la fin du traitement pause Citer
(gile) Posté(e) le 21 juillet 2021 Posté(e) le 21 juillet 2021 Salut, En remplaçant : set accoreexe="C:\Program Files\Autodesk\AutoCAD 2016\accoreconsole.exe" par : set accoreexe="C:\Program Files\Autodesk\AutoCAD 2020\accoreconsole.exe" ou : set accoreexe="C:\Program Files\Autodesk\AutoCAD 2021\accoreconsole.exe" ? Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Invité Bistoto Posté(e) le 22 juillet 2021 Posté(e) le 22 juillet 2021 Il y a 17 heures, (gile) a dit : Salut, Oui je l'avais déjà fait mais quand la fenêtre DOS s'ouvre et que je ne suis pas fort là dedans on à ceci pour un test sur 3 fichiers dwg : D:\06 - Remplacement texte dans dwg>echo off Redirect stdout (file: C:\Users\PROCESS\AppData\Local\Temp\accc17522). AcCoreConsole: StdOutConsoleMode: processed-output: enabled,auto AutoCAD Core Engine Console - Copyright 2021 Autodesk, Inc. All rights reserved. (S.74.0.0) Execution Path: C:\Program Files\Autodesk\AutoCAD LT 2022\accoreconsole.exe Current Directory: D:\06 - Remplacement texte dans dwg Version Number: S.74.0.0 (UNICODE) LogFilePath has been set to the working folder. Régénération du modèle. .. **** Variable système modifiée **** 2 des variables système gérées ont été modifiées par rapport à la valeur préférée. Utilisez la commande MONITEURVARSYS p2 des variables système gérées ont été modifiées par rapport à la valeur préférée. Utilisez la commande MONITEURVARSYS pour afficher les modifications. Commande: Commande: Commande: _-layer Calque courant: "0" Entrez une option [?/Etablir/CHoisir/Nouv/Renommer/ACtif/INactif/COuleur/TLigne/EPaisseurl/TRANsparence/MAtériau/Tracé/GEntrez une option [?/Etablir/CHoisir/Nouv/Renommer/ACtif/INactif/COuleur/TLigne/EPaisseurl/TRANsparence/MAtériau/Tracé/Geler/Libérer/Verrouiller/Déverrouiller/étAt/deScription/RApprocher/Xréf]: _unlock Entrer la liste des noms de calque de déverrouiller ou <sélection d'objets>: * Entrez une option [?/Etablir/CHoisir/Nouv/Renommer/ACtif/INactif/COuleur/TLigne/EPaisseurl/TRANsparence/MAtériau/Tracé/GEntrez une option [?/Etablir/CHoisir/Nouv/Renommer/ACtif/INactif/COuleur/TLigne/EPaisseurl/TRANsparence/MAtériau/Tracé/Geler/Libérer/Verrouiller/Déverrouiller/étAt/deScription/RApprocher/Xréf]: Commande: (if Commande LISP non disponible. Commande: Redirect stdout (file: C:\Users\PROCESS\AppData\Local\Temp\accc109962). AcCoreConsole: StdOutConsoleMode: processed-output: enabled,auto AutoCAD Core Engine Console - Copyright 2021 Autodesk, Inc. All rights reserved. (S.74.0.0) Execution Path: C:\Program Files\Autodesk\AutoCAD LT 2022\accoreconsole.exe Current Directory: D:\06 - Remplacement texte dans dwg Version Number: S.74.0.0 (UNICODE) LogFilePath has been set to the working folder. Régénération du modèle. . **** Variable système modifiée **** 2 des variables système gérées ont été modifiées par rapport à la valeur préférée. Utilisez la commande MONITEURVARSYS p2 des variables système gérées ont été modifiées par rapport à la valeur préférée. Utilisez la commande MONITEURVARSYS pour afficher les modifications. Commande: Commande: Commande: _-layer Calque courant: "0" Entrez une option [?/Etablir/CHoisir/Nouv/Renommer/ACtif/INactif/COuleur/TLigne/EPaisseurl/TRANsparence/MAtériau/Tracé/GEntrez une option [?/Etablir/CHoisir/Nouv/Renommer/ACtif/INactif/COuleur/TLigne/EPaisseurl/TRANsparence/MAtériau/Tracé/Geler/Libérer/Verrouiller/Déverrouiller/étAt/deScription/RApprocher/Xréf]: _unlock Entrer la liste des noms de calque de déverrouiller ou <sélection d'objets>: * Entrez une option [?/Etablir/CHoisir/Nouv/Renommer/ACtif/INactif/COuleur/TLigne/EPaisseurl/TRANsparence/MAtériau/Tracé/GEntrez une option [?/Etablir/CHoisir/Nouv/Renommer/ACtif/INactif/COuleur/TLigne/EPaisseurl/TRANsparence/MAtériau/Tracé/Geler/Libérer/Verrouiller/Déverrouiller/étAt/deScription/RApprocher/Xréf]: Commande: (if Commande LISP non disponible. Commande: Redirect stdout (file: C:\Users\PROCESS\AppData\Local\Temp\accc169522). AcCoreConsole: StdOutConsoleMode: processed-output: enabled,auto AutoCAD Core Engine Console - Copyright 2021 Autodesk, Inc. All rights reserved. (S.74.0.0) Execution Path: C:\Program Files\Autodesk\AutoCAD LT 2022\accoreconsole.exe Current Directory: D:\06 - Remplacement texte dans dwg Version Number: S.74.0.0 (UNICODE) LogFilePath has been set to the working folder. Régénération du modèle. . **** Variable système modifiée **** 2 des variables système gérées ont été modifiées par rapport à la valeur préférée. Utilisez la commande MONITEURVARSYS pour afficher les modifications. Commande: Commande: Commande: _-layer Calque courant: "0" Entrez une option [?/Etablir/CHoisir/Nouv/Renommer/ACtif/INactif/COuleur/TLigne/EPaisseurl/TRANsparence/MAtériau/Tracé/Geler/Libérer/Verrouiller/Déverrouiller/étAt/deScription/RApEntrez une option [?/Etablir/CHoisir/Nouv/Renommer/ACtif/INactif/COuleur/TLigne/EPaisseurl/TRANsparence/MAtériau/Tracé/Geler/Libérer/Verrouiller/Déverrouiller/étAt/deScription/RApprocher/Xréf]: _unlock Entrer la liste des noms de calque de déverrouiller ou <sélection d'objets>: * Entrez une option [?/Etablir/CHoisir/Nouv/Renommer/ACtif/INactif/COuleur/TLigne/EPaisseurl/TRANsparence/MAtériau/Tracé/Geler/Libérer/Verrouiller/Déverrouiller/étAt/deScription/RApEntrez une option [?/Etablir/CHoisir/Nouv/Renommer/ACtif/INactif/COuleur/TLigne/EPaisseurl/TRANsparence/MAtériau/Tracé/Geler/Libérer/Verrouiller/Déverrouiller/étAt/deScription/RApprocher/Xréf]: Commande: (if Commande LISP non disponible. Salut, En remplaçant : set accoreexe="C:\Program Files\Autodesk\AutoCAD 2016\accoreconsole.exe" par : set accoreexe="C:\Program Files\Autodesk\AutoCAD 2020\accoreconsole.exe" ou : set accoreexe="C:\Program Files\Autodesk\AutoCAD 2021\accoreconsole.exe" ? Bonjour, Ceci fonctionnait très bien sur autocad 2016 mais pour autocad 2020 et 2021 ne fonctionne plus!! Auriez vous une solution? Fichier "Remplacer_toto_par_titi.scr" (il doit y avoir une espace ou un saut de ligne après _quit) qui remplace tous les textes "toto" par "titi". _-layer _unlock * (if (setq ss (ssget "_X" '((0 . "TEXT") (1 . "toto")))) (repeat (setq i (sslength ss)) (setq elst (entget (ssname ss (setq i (1- i))))) (entmod (subst (cons 1 "titi") '(1 . "toto") elst)))) _qsave _quit Fichier "Remplacer_toto_par_titi.bat" qui exécute le script ci-dessus sur tous les fichiers dwg de dossier "F:\Dessins test" et de ses sous-dossiers. echo off :: Chemin de la console AutoCAD (à modifier suivant la version utilisée) set accoreexe="C:\Program Files\Autodesk\AutoCAD 2016\accoreconsole.exe" :: Chemin du répertoire contentant les fichiers à traiter (à modifier) set "source=F:\Dessins test" :: Chemin du script à exécuter (à modifier) set script="F:\Batch\Remplacer_toto_par_titi.scr" FOR /f "delims=" %%f IN ('dir /b /s "%source%\*.dwg"') DO %accoreexe% /i "%%f" /s %script% :: Mettre en commentaire pour fermer automatiquement la console à la fin du traitement pause Citer
Invité Lukyluke Posté(e) le 10 mai 2023 Posté(e) le 10 mai 2023 Le 06/09/2016 à 18:18, (gile) a dit : On peut même faire plus performant en LISP (ou autre langage de programmation), en ouvrant les dessins "en mémoire", c'est à dire qu'on accède à la base de données des dessins sans les ouvrir dans l'éditeur. Mais ça demande d'écrire plus de code qu'une simple routine de remplacement de texte et je ne suis pas sûr que ce soit plus performant que la console AutoCAD avec un fichier .bat et un fichier .scr Exemple Fichier "Remplacer_toto_par_titi.scr" (il doit y avoir une espace ou un saut de ligne après _quit) qui remplace tous les textes "toto" par "titi". _-layer _unlock * (if (setq ss (ssget "_X" '((0 . "TEXT") (1 . "toto")))) (repeat (setq i (sslength ss)) (setq elst (entget (ssname ss (setq i (1- i))))) (entmod (subst (cons 1 "titi") '(1 . "toto") elst)))) _qsave _quit Fichier "Remplacer_toto_par_titi.bat" qui exécute le script ci-dessus sur tous les fichiers dwg de dossier "F:\Dessins test" et de ses sous-dossiers. echo off :: Chemin de la console AutoCAD (à modifier suivant la version utilisée) set accoreexe="C:\Program Files\Autodesk\AutoCAD 2016\accoreconsole.exe" :: Chemin du répertoire contentant les fichiers à traiter (à modifier) set "source=F:\Dessins test" :: Chemin du script à exécuter (à modifier) set script="F:\Batch\Remplacer_toto_par_titi.scr" FOR /f "delims=" %%f IN ('dir /b /s "%source%\*.dwg"') DO %accoreexe% /i "%%f" /s %script% :: Mettre en commentaire pour fermer automatiquement la console à la fin du traitement pause Super script, cela fonctionne parfaitement sous 2023. Une question, pour ajouter un nuage de révision au texte modifié, vous auriez une piste? Citer
Invité Lukyluke Posté(e) le 11 mai 2023 Posté(e) le 11 mai 2023 Le 06/09/2016 à 18:18, (gile) a dit : On peut même faire plus performant en LISP (ou autre langage de programmation), en ouvrant les dessins "en mémoire", c'est à dire qu'on accède à la base de données des dessins sans les ouvrir dans l'éditeur. Mais ça demande d'écrire plus de code qu'une simple routine de remplacement de texte et je ne suis pas sûr que ce soit plus performant que la console AutoCAD avec un fichier .bat et un fichier .scr Exemple Fichier "Remplacer_toto_par_titi.scr" (il doit y avoir une espace ou un saut de ligne après _quit) qui remplace tous les textes "toto" par "titi". _-layer _unlock * (if (setq ss (ssget "_X" '((0 . "TEXT") (1 . "toto")))) (repeat (setq i (sslength ss)) (setq elst (entget (ssname ss (setq i (1- i))))) (entmod (subst (cons 1 "titi") '(1 . "toto") elst)))) _qsave _quit Fichier "Remplacer_toto_par_titi.bat" qui exécute le script ci-dessus sur tous les fichiers dwg de dossier "F:\Dessins test" et de ses sous-dossiers. echo off :: Chemin de la console AutoCAD (à modifier suivant la version utilisée) set accoreexe="C:\Program Files\Autodesk\AutoCAD 2016\accoreconsole.exe" :: Chemin du répertoire contentant les fichiers à traiter (à modifier) set "source=F:\Dessins test" :: Chemin du script à exécuter (à modifier) set script="F:\Batch\Remplacer_toto_par_titi.scr" FOR /f "delims=" %%f IN ('dir /b /s "%source%\*.dwg"') DO %accoreexe% /i "%%f" /s %script% :: Mettre en commentaire pour fermer automatiquement la console à la fin du traitement pause Bonjour, petite question complémentaire: Je cherche a récupérer les coordonnées du texte modifié, dans le but de faire un nuage de revision autour du texte modifié. Auriez vous un exemple pour la syntaxe? Merci Citer
Messages recommandés