| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Aus Lisp ein BAT starten und darauf warten (1907 mal gelesen)
|
Peter2 Ehrenmitglied V.I.P. h.c.
Beiträge: 3849 Registriert: 15.10.2003
|
erstellt am: 13. Dez. 2010 12:45 <-- editieren / zitieren --> Unities abgeben:
Gibt es eine Möglichkeit, aus Lisp eine BAT-datei zu starten und auf deren Fertigstellung zu warten? Hintergrund: - Scriptverarbeitung von Zeichnungen, und die laufen im (ca.) 4 sec Takt - in diesem Script läuft ein Lisp, dass alles mögliche macht, unter anderem eine Batch-datei erstellt, also ungefähr Code: (princ "convert.exe a.doc a-neu.doc -x -y - blabla -ding -dong" -> c:\a_conv.bat)
- wenn das Lisp fast fertig ist, wird der Batch aufgerufen
Code: (startapp c:\a_conv.bat)
Problem: - der BAT hat eine ungewisse Laufzeit, aber meistens dauert es länger als der 4 sec Takt - damit komme ich in das Problem, dass Batch "A" noch nicht fertig ist, wenn Batch "B" gestartet wird - usw. Daher meine Frage wie oben: - kann ich BAT nicht nur starten, sondern auch das Endergebnis abwarten und dann darauf reagieren (Ergebnis OK: starte nächste Zeichnung; nicht OK: sende Meldung) - eine fixe Wartezeit ("wait 10000 msec") möchte ich nicht nehmen, dass ist zu Holzkeulenmässig und zu wackelig - es könnte der BAT am Schluss ein File erzeugen ("c:/bin_fertig.log") und AutoCAD 10 sec im Sekundentakt prüfen (if exist "bin_fertig.log" then weiter else "warte 1 sec und suche nocheinmal"). Aber derzeit sieht mir das nicht so wahnsinnig berauschend aus ... bessere Ideen? You're welcome! Peter ------------------ Für jedes Problem gibt es eine einfache Lösung. Die ist aber meistens falsch. ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 13. Dez. 2010 12:56 <-- editieren / zitieren --> Unities abgeben: Nur für Peter2
|
Peter2 Ehrenmitglied V.I.P. h.c.
Beiträge: 3849 Registriert: 15.10.2003
|
erstellt am: 13. Dez. 2010 13:12 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von CADmium: .... und das lisp rotiert in einer while schleife, ...
krawuzi-kapuzi Und wie kann ich AutoCAD motivieren, nicht mit Vollgas zu rotieren und was zu suchen, was es noch nicht gibt ... Peter Edit: Vielleicht brauche ich gar kein BAT, sondern kann mit
Code: (startapp "convert.exe a.doc a-neu.doc -x -y - blabla -ding -dong"
direkt starten? (Muss ich später ausprobieren). Aber löst das das "Warte- und Überwachungsproblem"?Peter ------------------ Für jedes Problem gibt es eine einfache Lösung. Die ist aber meistens falsch. ;-) [Diese Nachricht wurde von Peter2 am 13. Dez. 2010 editiert.] [Diese Nachricht wurde von Peter2 am 13. Dez. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 13. Dez. 2010 14:20 <-- editieren / zitieren --> Unities abgeben: Nur für Peter2
|
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 13. Dez. 2010 14:56 <-- editieren / zitieren --> Unities abgeben: Nur für Peter2
Hallo Peter, auch ich habe schon das Thema gehabt und habe es folgendermaßen gelöst: Ich benenne die auszuführende Datei um, führe Sie dann aus und laß eine While-Schleife hinterherlaufen, die solange läuft, bis die Datei wieder in Ihren ursprünglichen Namen umbenannt werden kann. Zudem läuft ein Indexzähler mit (im Beispiel bis 400000) damit darüber ein Notausstieg aus der While-Schleife erfolgen kann, wenn die Datei nicht mehr umbenannt werden kann. Sicherlich nicht sehr elegant, aber bisher habe ich damit arbeiten können. Code:
;;;file z.B. c:\\temp\\machwas.bat (defun RunAndWait (file / ) (if (vl-file-rename file (setq WorkingFile(strcat (car (fnsplitl file)) (cadr (fnsplitl file))"_Working" (caddr (fnsplitl file))))) (progn (startapp WorkingFile) (setq n 1) (princ (strcat "\nDatei arbeitet: (" (itoa n) ")")) (princ) (while (and (< (setq n (+ n 1))400000) (not (vl-file-rename WorkingFile file))) (princ (strcat "\nDatei arbeitet: (" (itoa n) ")")) (princ)) (if (>= n 400000) (alert "Da ist was schiefgegangen") (alert "Hat alles funktioniert.")))))
PS: ------------------ viele Grüße Jörn http://www.bosse-engineering.com Stammtisch in Wolfsburg im Januar 2010 [Diese Nachricht wurde von joern bosse am 13. Dez. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 13. Dez. 2010 15:02 <-- editieren / zitieren --> Unities abgeben: Nur für Peter2
Falls man in der acad.pgp definierte Befehle in Lisp aufrufen kann ??? ... aus der ACAD.PGP: Zitat: ; Format für externe Befehle: ; <Befehlsname>,[<Shell-Anforderung>],<Bitkennzeichen>,[*]<Eingabeaufforderung>,; Die Bits des Bitkennzeichens haben folgende Bedeutungen: ; Bit 1: wenn aktiviert, wird Abschließen eines Anwendungsvorgangs ; nicht abgewartet ; Bit 2: wenn aktiviert, wird die Anwendung minimiert ausgeführt ; Bit 4: wenn aktiviert, wird die Anwendung im Hintergrund ausgeführt ; Bit 8: wenn aktiviert, wird die Argumentzeichenfolge in Anführungszeichen gesetzt ; ; Geben Sie im Feld für das Bitkennzeichen die Summe der gewünschten Bits ein. ; Bits 2 und 4 schließen sich gegenseitig aus; sind beide aktiviert, wird nur ; Bit 2 verwendet. ; Die nützlichsten Werte sind 0 (Anwendung starten und auf Abschließen des ; Vorgangs warten),
vielleicht kannst was damit anfangen? ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter2 Ehrenmitglied V.I.P. h.c.
Beiträge: 3849 Registriert: 15.10.2003
|
erstellt am: 13. Dez. 2010 15:45 <-- editieren / zitieren --> Unities abgeben:
Ein pauschales Danke für die Beiträge - da habe ich jetzt eine gute Basis, um in den nächsten Tagen zu basteln. Peter ------------------ Für jedes Problem gibt es eine einfache Lösung. Die ist aber meistens falsch. ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sanru Mitglied
Beiträge: 24 Registriert: 23.07.2010
|
erstellt am: 14. Dez. 2010 11:53 <-- editieren / zitieren --> Unities abgeben: Nur für Peter2
Hallo Peter, wenn du es sofort über die EXE lösen willst wie hier von dir angezeigt. Zitat: Edit: Vielleicht brauche ich gar kein BAT, sondern kann mit Code: -------------------------------------------------------------------------------- (startapp "convert.exe a.doc a-neu.doc -x -y - blabla -ding -dong" --------------------------------------------------------------------------------
direkt starten? (Muss ich später ausprobieren).
Könnte dir vielleicht noch DosLib mit dem Befehl dos_exewait helfen. Gruß Wolfgang Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter2 Ehrenmitglied V.I.P. h.c.
Beiträge: 3849 Registriert: 15.10.2003 Win 10 bzw. 11 / 64 Pro AutoCAD MAP 3D 2023 BricsCAD 24
|
erstellt am: 14. Dez. 2010 12:44 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Sanru: Könnte dir vielleicht noch DosLib mit dem Befehl dos_exewait helfen.
Auch das klingt gut, danke. Ein Problem könnte es aber damit geben, dass im Handbetrieb der Druckertreiber (PDF XChange) von selbst noch Optimierungsroutinen laufen lässt, wenn AutoCAD mit dem Druck schon fertig ist. Also ist vielleicht das ohnehin erfolglos, wenn man zwar den Druckbefehl selbst überwacht, aber das dritte Unterprogramm noch was macht .... Wir werden sehen. Peter ------------------ Für jedes Problem gibt es eine einfache Lösung. Die ist aber meistens falsch. ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 14. Dez. 2010 17:21 <-- editieren / zitieren --> Unities abgeben: Nur für Peter2
Hallo Peter, ein Hinweis: Wenn die Bat-Datei nur für Dich ist, kannst Du Windows so einstellen, dass das Erstellen von Bat-Dateien zugelassen wird. Wenn Deine Konstruktion auch auf einem anderen PC laufen soll, kann es Probleme geben, je nach dem wie die Sicherheitsstufe eingestellt ist. Gruß Theodor Schönwald
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter2 Ehrenmitglied V.I.P. h.c.
Beiträge: 3849 Registriert: 15.10.2003 Win 10 bzw. 11 / 64 Pro AutoCAD MAP 3D 2023 BricsCAD 24
|
erstellt am: 14. Dez. 2010 17:56 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Theodor Schoenwald: Hallo Peter,ein Hinweis: Wenn die Bat-Datei nur für Dich ist, ...
Ja, nur eigenes Gebastel. Peter ------------------ Für jedes Problem gibt es eine einfache Lösung. Die ist aber meistens falsch. ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 14. Dez. 2010 18:49 <-- editieren / zitieren --> Unities abgeben: Nur für Peter2
Hallo Peter, dann habe ich schon so etwas gemacht: bei BAT "A" steht in der letzen Zeile: echo Fertig >Dummy.TXT Die Dummy-Datei-Name kann auch mit einem bestimmten Ordner angegeben werden z.B: echo Fertig >C:\TEMP\Dummy.TXT Bat "B" kontrolliert ob es eine Datei "Dummy.txt" gibt. Dann kann noch getestet werden ob in der Datei: "Dummy.txt" das Wort "Fertig" steht. Gruß Theodor Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter2 Ehrenmitglied V.I.P. h.c.
Beiträge: 3849 Registriert: 15.10.2003 Win 10 bzw. 11 / 64 Pro AutoCAD MAP 3D 2023 BricsCAD 24
|
erstellt am: 14. Dez. 2010 20:25 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Theodor Schoenwald: ...Bat "B" kontrolliert ob es eine Datei "Dummy.txt" gibt. ...
Aber das gibt doch ein Zeitproblem - was macht B, wenn Dummy noch nicht da ist, aber in 4 Sekunden kommen wird? Eine Zeitwarteschleife in BAT? Peter ------------------ Für jedes Problem gibt es eine einfache Lösung. Die ist aber meistens falsch. ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 15. Dez. 2010 11:34 <-- editieren / zitieren --> Unities abgeben: Nur für Peter2
Hallo Peter, in Google bat wait befehl da findest Du viel über warten mit BAT. Die WAIT.EXE ist auch ein praktisches Tool. Auch das habe ich gesehen: echo >1.vbs wscript.sleep 5000 cscript 1.vbs del 1.vbs c:\windows\notepad.exe Gruß Theodor [Diese Nachricht wurde von Theodor Schoenwald am 15. Dez. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |