| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Directory Tree kopieren... (3058 mal gelesen)
|
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2490 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 15. Mai. 2007 21:16 <-- editieren / zitieren --> Unities abgeben:
Hallo Leutz, ich suche nach einer Möglichkeit oder bereits fertigem Modul zum kopieren eines kompletten Verzeichnis Trees. Natürlich inklusive aller enthaltener Files und SubFolder & natürlich auch über UNC Pfade. Und das wiederum OHNE WindowsScriptingHost. Ich benötige eine Funktion die nur VLisp/Lisp benötigt. Habe aber bisher leider nix gefunden. Vielleicht hat ja hier einer der Anwesenden etwas ähnliches schon gesehen? ------------------ Ciao, Marc Mein AG sucht u.a. Architekten und Bauzeichner! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 16. Mai. 2007 08:02 <-- editieren / zitieren --> Unities abgeben: Nur für marc.scherer
Fertig habe ich auch nix aber ich schau nochmal nach. Auf alle Fälle kann es etwas Dauern, bis alle Unterverzeichnisse ermittelt und zu 'ner Liste zusammengestellt wurden. Ich meine ich hatte mal irgendw sowas. Vielleicht hilft dir aber auch daserstmal weiter. Alternativ kannsde ja mal über _shell und xcopy nachdenken naja und doslib ist klaube auch noch mit sowas bestückt ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3329 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 16. Mai. 2007 08:45 <-- editieren / zitieren --> Unities abgeben: Nur für marc.scherer
Hi, Zitat: Original erstellt von marc.scherer:
Und das wiederum OHNE WindowsScriptingHost. Ich benötige eine Funktion die nur VLisp/Lisp benötigt.
ohne WindowsScriptingHost gibt's was. Dann allerdings über das FilesystemObject. Alternativ müsste was über DOSLib gehen. Stellt sich die Frage, warum du die Windows-API außen vor lassen willst? Gruß CADchup
------------------ CADmaro.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1734 Registriert: 11.10.2004 Window 10 ACAD 2021 CIVIL 2021 BricsCAD V14-V22 Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz 16.0GB RAM NVIDIA GeForce GTX 1050<P>
|
erstellt am: 16. Mai. 2007 08:51 <-- editieren / zitieren --> Unities abgeben: Nur für marc.scherer
Hallo Marc, vielleicht ist das folgende was für Dich (prüfen musst Du selber, ich habe nur einen kurzen Testlauf gemacht) Code:
;;;Bei den Pfadangaben doppelter Backslash am Ende!!! ;;;z.B. (folder_copy "c:\\temp\\" "c:\\test\\" (defun folder_copy (pfad1 pfad2 / A B liste) (setq liste (vl-sort (JB_folder_copy:search liste pfad1 1) '(lambda (e1 e2) (< (car e1) (car e2))))) ;;;Directory's erstellen (mapcar '(lambda (A) (vl-mkdir (strcat pfad2 (substr (cadr A) (+ 1 (strlen pfad1)))))) (vl-remove-if '(lambda (B) (= (car B) 0)) liste)) ;;;Files (mapcar '(lambda (A) (vl-file-copy (cadr A) (strcat pfad2 (substr (cadr A) (+ 1 (strlen pfad1)))))) (vl-remove-if '(lambda (B) (/= (car B) 0)) liste)))(defun JB_folder_copy:search (liste pfad1 i / A B files) ;;;FILES (if (setq files (vl-directory-files pfad1 nil 1)) (mapcar '(lambda (A) (setq liste (cons (list 0 (strcat pfad1 A)) liste))) (vl-directory-files pfad1 nil 1))) (setq liste (cons (list i pfad1) liste)) (mapcar '(lambda (A) (setq i (+ i 1)) (setq liste (JB_folder_copy:search liste (strcat pfad1 A "\\") i))) (vl-remove-if '(lambda (B) (member B '("." ".."))) (vl-directory-files pfad1 nil -1))) liste)
------------------ viele Grüße Jörn [Diese Nachricht wurde von joern bosse am 16. Mai. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2490 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 16. Mai. 2007 10:03 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von CADchup: Stellt sich die Frage, warum du die Windows-API außen vor lassen willst?
Habbich mir doch gedacht, dass Du diese Frage stellen würdest... Ganz einfach: Weil ich das Ding aus der acaddoc.lsp aufrufen will und dort möglichst wenig Overhead und advanced Schnickschnack drinnen haben will... ------------------ Ciao, Marc Mein AG sucht u.a. Architekten und Bauzeichner! [Diese Nachricht wurde von marc.scherer am 16. Mai. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2490 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 16. Mai. 2007 10:07 <-- editieren / zitieren --> Unities abgeben:
|
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3329 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 16. Mai. 2007 10:32 <-- editieren / zitieren --> Unities abgeben: Nur für marc.scherer
Hi, Zitat: Original erstellt von marc.scherer: [QUOTE]Weil ich das Ding aus der acaddoc.lsp aufrufen will und dort möglichst wenig Overhead und advanced Schnickschnack drinnen haben will...
du willst bei jeder Zeichnung, die geöffnet wird, Dateien und Ordner prüfen und ggf. kopieren lassen (können)? Okaaaaay... Dann verstehe ich die Overhead-Sache. Als User fänd ich es allerdings nicht so prickelnd, wenn ich nur mal schnell eine DWG aufmachen würde, um etwas nachzusehen und ich dann u. U. warten müsste, bis ein paar Datei-Updates gelaufen sind. Auch wenn es vielleicht nur Sekunden sind, um die es hier geht - die können sehr lang sein, wenn man's eilig hat. Du willst es also eigentlich über die acad.lsp machen. Dann kannst du es aber auch gleich Lisp-los von den ITlern ins Netinstall nehmen lassen und der Acad-Start bleibt so, wie er ist. Gruß CADchup
------------------ CADmaro.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2490 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 16. Mai. 2007 10:48 <-- editieren / zitieren --> Unities abgeben:
Hi Heinzi, vielen Dank für Deine Gedanken und Ideen zu dem Thema. Was ich mich aber Frage ist: Warum glauben Du und das Wiesel eigentlich das ich mir nicht genau überlegt habe was ich tue? Natürlich kopiere ich NICHT bei jedem öffnen einer Datei irgendwelche Dateien. Ich verfolge da eine bestimmte Strategie, wir können das ja mal auf der nexten cad.pro erörtern ;-) Danke Dir trotzdem, ich verstehe Dich natürlich auch: Manchmal erscheinen einem Fragen anderer eben ein wenig obscur... Geht mir ja auch manchmal so ;-) Und NEIN, ich will es BEWUßT NICHT über die acad.lsp machen! Ich pflege doch nicht zwei Datein, wenn ich nur eine benötige... ------------------ Ciao, Marc Mein AG sucht u.a. Architekten und Bauzeichner! [Diese Nachricht wurde von marc.scherer am 16. Mai. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3329 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 16. Mai. 2007 11:14 <-- editieren / zitieren --> Unities abgeben: Nur für marc.scherer
Zitat: Original erstellt von marc.scherer: Was ich mich aber Frage ist: Warum glauben Du und das Wiesel eigentlich das ich mir nicht genau überlegt habe was ich tue? Natürlich kopiere ich NICHT bei jedem öffnen einer Datei irgendwelche Dateien. Ich verfolge da eine bestimmte Strategie, wir können das ja mal auf der nexten cad.pro erörtern ;-)
Türlich bin ich davon ausgegangen, dass du dir genau überlegst, was du machst. Bist doch einer von den Guten. Ich weiß, dass wir in dieser Sache unterschiedlicher Meinung waren und sind, wir werden das also unbedingt auf der Messe ausdiskutieren müssen! Gruß CADchup
------------------ CADmaro.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2490 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 16. Mai. 2007 11:22 <-- editieren / zitieren --> Unities abgeben:
|
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2490 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 16. Mai. 2007 12:19 <-- editieren / zitieren --> Unities abgeben:
...und hier meine abgewandelte Version von Jörns Code: (ich habe noch zwei interne Routinen eingebaut die die Argumentübergabe variabler gestalten, "//Server/Freigabe" ist genauso möglich wie "//Server/Freigabe/" oder "\\\\Server\\Freigabe" oder "\\\\Server\\Freigabe\\") Code:
;| Subroutine zum Kopieren ganzer Trees. Original-Funktion von Jörn Bosse veröffentlicht über cad.de ForumWichtig für die Funktions ist auf jeden Fall der Doppelbackslash am Ende der Pfadangabe! Vorgeschaltete Funktion hängt den Backslash auf jeden Fall an, falls er in den Argumenten nicht verwendet wurde. Die Form des Pfaddelimiters ist auch egal, eine vorgeschaltete Funktion ersetzt Slashes mit Backslashes. Ansonsten keinerlei Errorhandling!!! Argumente: STRSOURCE = Quellordner der zu kopieren ist STRTARGET = Zielordner der Kopiererei |; (defun DT:FOLDER_COPY (STRSOURCE STRTARGET / A B LISTE) (defun DT:TRANSLATEPATHDELIMITTERS (STRPATH STRNEWDEL STROLDDEL /) (while (vl-string-search STROLDDEL STRPATH) (setq STRPATH (vl-string-subst STRNEWDEL STROLDDEL STRPATH)) ) STRPATH ) (defun DT:APPENBACKSLASH (STRPATH /) (if (not (= (substr STRPATH (strlen STRPATH) 1) "\\")) (setq STRPATH (strcat STRPATH "\\")) STRPATH ) ) (setq STRSOURCE (DT:APPENBACKSLASH (DT:TRANSLATEPATHDELIMITTERS STRSOURCE "\\" "/") ) STRTARGET (DT:APPENBACKSLASH (DT:TRANSLATEPATHDELIMITTERS STRTARGET "\\" "/") ) LISTE (vl-sort (DT:FOLDER_COPY:SEARCH LISTE STRSOURCE 1) '(lambda (E1 E2) (< (car E1) (car E2))) ) ) ;;Directory's erstellen (mapcar '(lambda (A) (vl-mkdir (strcat STRTARGET (substr (cadr A) (+ 1 (strlen STRSOURCE)))) ) ) (vl-remove-if '(lambda (B) (= (car B) 0)) LISTE) ) ;;Files (mapcar '(lambda (A) (vl-file-copy (cadr A) (strcat STRTARGET (substr (cadr A) (+ 1 (strlen STRSOURCE)))) ) ) (vl-remove-if '(lambda (B) (/= (car B) 0)) LISTE) ) ) (defun DT:FOLDER_COPY:SEARCH (LISTE PFAD1 I / A B FILES) ;;FILES (if (setq FILES (vl-directory-files PFAD1 NIL 1)) (mapcar '(lambda (A) (setq LISTE (cons (list 0 (strcat PFAD1 A)) LISTE)) ) (vl-directory-files PFAD1 NIL 1) ) ) (setq LISTE (cons (list I PFAD1) LISTE)) (mapcar '(lambda (A) (setq I (+ I 1)) (setq LISTE (DT:FOLDER_COPY:SEARCH LISTE (strcat PFAD1 A "\\") I) ) ) (vl-remove-if '(lambda (B) (member B '("." ".."))) (vl-directory-files PFAD1 NIL -1) ) ) LISTE )
...------------------ Ciao, Marc Mein AG sucht u.a. Architekten und Bauzeichner! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |