Ik ben bezig met het schrijven van een Lisp routine om in batch een groot aantal .lsp bestanden te converteren naar .fas. Dat lukt momenteel maar de .fas bestanden krijgen de datum van de conversie. Is het mogelijk om die .fas bestanden dezelfde bestandsdatum te geven als de .lsp, en hoe dan?
Edit: ik had dit graag geïntegreerd in de Lisp routine.
Met Total Commander (https://www.ghisler.com/) kun je de datum van bestanden wijzigen.
Bedankt voor je antwoord Roy, maar ik had dit graag geïntegreerd in de Lisp routine.
attribute changer kan dit ook (freeware)
https://www.petges.lu/home/download
Volgens mij hangt windows deze metadata aan het bestand maar ik kan het mis hebben.
Als je de lisp opend en opslaat in dezelfde gang als het maken van de .fas???
OK, dan zijn de seconden niet goed... maar wel een simpele oplossing.
Maar misschien beter om met een versie te werken i.p.v. een datum.
bv:
Lisp_v0.1.lsp -> Lisp_v0.1.fas ->> Lisp_v0.1.vlx
Bedankt voor je antwoord.
Citaat van: EddyBeerke op di 13 12 2016, 15:18:58Als je de lisp opent en opslaat in dezelfde gang als het maken van de .fas???
OK, dan zijn de seconden niet goed... maar wel een simpele oplossing.
Dat is inderdaad een mogelijkheid.
Citaat van: EddyBeerke op di 13 12 2016, 15:18:58Maar misschien beter om met een versie te werken i.p.v. een datum.
bv: Lisp_v0.1.lsp -> Lisp_v0.1.fas ->> Lisp_v0.1.vlx
Dan moet ik ook telkens menu's en macro's en andere lisp's aanpassen. Dus minder efficiënt mbt beheer.
Het ophalen van de datum & tijd van de .lsp lukt, het converteren naar .fas lukt ook, nu moet ik nog uitvissen hoe ik de datum en tijd van de .fas kan wijzigen.
Dit is je oplossing voor het veranderen van de datum en tijd denk ik:
Je hebt daat DosLib voor nodig.
http://www.en.na.mcneel.com/doslib.htm
Citeerdos_touch
Sets the date and time at which files were last written to the current date and time or, optionally, a specified date.
--------------------------------------------------------------------------------
Syntax
(dos_touch filespec [date [time]])
Parameters
filename
The desired file or files. filespec can contain wildcard characters ("*" and "?"). If filespec is supplied, it is assumed to be *.*.
date
A list of numbers specifying the new year, month, and day. For details, see dos_date. If omitted, the current date is used.
time
A list of numbers specifying the new hour and minutes in 24-hour format. Optionally, the seconds and milliseconds can be specified. For details, see dos_time. If omitted, the current time is used.
Returns
A list of file that were modified if successful.
nil on error.
Example
Command: (dos_touch "C:\\Program Files\\Autocad 2006\\*.dwg")
("Drawing2.dwg" "Drawing1.dwg")
Merci Eddy, 'k zal het vanavond eens proberen.
Dat is inderdaad een (de?) oplossing, bedankt!
Nu kan ik verder werken aan mijn Lisp routine, 'k ben er bijna.
gery.
Volgens mij is het bij het omzetten naar fas niet zo dat de lisp ook wordt uitgevoerd.
Je moet e.a dan nog steeds aanvullend op het omzetten naar fas doen.
dus ik zie de winst niet zo.
Met een simpel tooltje zoals gepost kan je met 1 druk op de knop de gegevens van alle bestanden in een map aanpassen zodat je 1 overeenkomende set hebt.
Citaat van: bart op do 15 12 2016, 13:32:49Volgens mij is het bij het omzetten naar fas niet zo dat de lisp ook wordt uitgevoerd.
Dat is ook niet de bedoeling.
Citaat van: bart op do 15 12 2016, 13:32:49Met een simpel tooltje zoals gepost kan je met 1 druk op de knop de gegevens van alle bestanden in een map aanpassen zodat je 1 overeenkomende set hebt.
De bedoeling is om dit in één en dezelfde lisp routine te doen.
Met dos_touch kan ik de datum wijzigen maar niet de tijd. De tijd wordt steeds gewijzigd naar de huidige tijd.
Hier werkt (dos_touch) zoals omschreven (zie bijdrage van Eddy):
(dos_touch "C:/Downloads/1.txt" '(2016 12 12) '(11 00))
Citaat van: roy_043 op vr 16 12 2016, 10:53:13Hier werkt (dos_touch) zoals omschreven (zie bijdrage van Eddy):
(dos_touch "C:/Downloads/1.txt" '(2016 12 12) '(11 00))
Ik krijg deze foutmelding in AutoCAD: "
Application ERROR: Bad argument type"
Welke DOSlib versie gebruikt u?
Ik snap niet waarom je dit zo ingewikkeld wil doen? Klinkt onhandig.
Wanneer je .vlx project maakt in vlisp, de compilatie start, dan worden alle .lsp bestanden eerst omgezet naar .fas. En waarom gebruikt je niet .vlx als je toch met meerdere .fas bestanen lijkt te willen gaan werken?
(Misschien heb ik ergens overheen gelezen..)
Ps.op dit forum onder sectie .vlx maken staan de stappen beschreven
Ik vraag mij af wat het eigenlijke doel is.
Ik gebruik vele lisp bestanden die worden aangeroepen en of geladen via een .mnl
Als ik "mijnmenu.CUIx" laad dan wordt "mijnmenu.mnl" megeladen waar alle instructies staan voor de goede werking van het menu.
Hierin zit zelfs een beveiliging met een .vlx die geladen en uitgevoerd wordt.
Is het geen PC van de zaak dan werkt het menu niet, of je moet een wachtwoord ingeven.
Hierdoor moet ik niet telkens een nieuwe .fas / .vlx of andere versies te maken en pas ik alleen de lisp aan (nieuwe versie) en de verwijzing naaar de lisp in de .mnl
Aanvulling:
Als je ook nog de thema's van AutoCAD wil ondersteunen dien je twee .dll's te maken.
In deze .dll's staan alleen de icons die jou menu gebruikt.
1 met "mijnmenu.dll" voor het donkere thema en 1 met "mijnmenu_light.dll" voor het lichte thema.
Je kunt hier http://www.angusj.com/resourcehacker/ voor gebruken.
@gery:
Ik herinner mij uit een andere context (http://www.opendcl.com/forum/index.php?PHPSESSID=q2j8fjqlp6e3vhorcqrj56bdp0&topic=1946.msg9554#msg9554) dat AutoCAD soms struikelt of bepaalde lijsten.
Probeer bijv. dit:
(dos_touch "C:/Downloads/1.txt" '(2016 12 12) '(11.0 00))
Roy, je zegt 'Probeer bij. dit:' maar geeft volgens mij dan dezelfde code opnieuw.
Wat zou een alternatief zijn dat autocad wel snapt?
Reimer
(ik ben gewoon nieuwsgierig)
Citaat van: roy_043 op vr 16 12 2016, 15:46:04Ik herinner mij uit een andere context (http://www.opendcl.com/forum/index.php?PHPSESSID=q2j8fjqlp6e3vhorcqrj56bdp0&topic=1946.msg9554#msg9554) dat AutoCAD soms struikelt of bepaalde lijsten.
Probeer bijv. dit:
(dos_touch "C:/Downloads/1.txt" '(2016 12 12) '(11.0 00))
Ook dit werkt niet.
Misschien dit:
(dos_touch "C:/Downloads/1.txt" '(2016.0 12.0 12.0) '(11.0 0.0 0.0 0.0))
Citaat van: roy_043 op za 17 12 2016, 11:00:48Misschien dit:
(dos_touch "C:/Downloads/1.txt" '(2016.0 12.0 12.0) '(11.0 0.0))
Als ik voor elk item in beide lists een floating value gebruik, dan lukt het ook voor de tijd. Raar, want de datum lukte wel zonder die floating values, enkel de tijd niet.
Bedankt!
De LISP code om in batch een groot aantal .lsp bestanden te converteren naar .fas, met behoud van de datum en tijd van het .lsp bestand:
(defun CompileAllLSP2FAS ( #LSPfolder #FASfolder / #FAS #FASdate #FAStime #LSP #LSPdate #LSPfile #LSPtime )
(foreach #LSPfile (vl-directory-files #LSPfolder "*.lsp" 1)
(setq #LSP (strcat #LSPfolder #LSPfile))
(setq #FAS (strcat #FASfolder (vl-string-right-trim "LSP" (strcase #LSPfile)) "fas"))
(vlisp-compile 'st #LSP)
(setq #LSPdate (RemoveItems '(2 4 5 6 7) (vl-file-systime #LSP)))
(setq #LSPtime (RemoveItems '(0 1 2 3) (vl-file-systime #LSP)))
(setq #FASdate (list (float (car #LSPdate)) (float (cadr #LSPdate)) (float (caddr #LSPdate))))
(setq #FAStime (list (float (car #LSPtime)) (float (cadr #LSPtime)) (float (caddr #LSPtime))))
(dos_touch #FAS #FASdate #FAStime)
)
(princ)
)
(defun RemoveItems ( #items #list / )
(if (and #items #list)
(if (zerop (car #items))
(RemoveItems (mapcar '1- (cdr #items)) (cdr #list))
(cons (car #list) (RemoveItems (mapcar '1- #items) (cdr #list)))
)
#list
)
)
De commando regel:
(CompileAllLSP2FAS "C:/sourcefolder/" "C:/destinationfolder/")
VLISP en DOSlib dienen geladen te zijn alvorens de routine te starten.
Edit: VLIDE moet ook open staan.
Citaat van: gery op za 17 12 2016, 15:18:52
...
De commando regel:
(CompileAllLSP2FAS "C:/sourcefolder/" "C:/destinationfolder/")
VLISP en DOSlib dienen geladen te zijn alvorens de routine te starten.
Edit: VLIDE moet ook open staan.
Je zou dit kunnen toevoegen om een map te selecteren als het niet altijd dezelfde map is:
(vl-filename-directory (getfiled "Select a File to get the dir" "c:/program files/" "*" 8))
Wat ik alleen niet snap is dat je zegt dat de VLIDE open moet staan.
Waarom is dat dan?
Citaat van: EddyBeerke op ma 19 12 2016, 08:52:17Wat ik alleen niet snap is dat je zegt dat de VLIDE open moet staan.
Waarom is dat dan?
Voor de (vlisp-compile) functie.
De vlide moet niet echt open staan maar moet wel minstens één keer geopend geweest zijn tijdens de AutoCAD sessie.