Aller au contenu

remplacement de texte dans plusieurs .dwg


Messages recommandés

Posté(e)

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

Posté(e)

Salut.

 

As-tu pensé à SuperAutoScript ?

 

Denis...

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)

Posté(e)

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").

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

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)

Posté(e)

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

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

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

Posté(e)

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

  • Upvote 1
  • 4 ans après...
Posté(e)

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
Posté(e)

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"

?

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)
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
  • 1 an après...
Invité Lukyluke
Posté(e)
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?

Invité Lukyluke
Posté(e)
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

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité