Give this a try -
BLAYFRZ accepts a case-sensitive WCMATCH string for the Layer name(s) that you want to batch freeze (just like the -LAYER Command), and reports how many layers have been frozen at the command line after the given drawing has been conditionally saved (only if one or more Layers have been frozen).
Code:
(vl-load-com)
(defun c:BLAYFRZ () (c:BatchLayerFreeze))
(defun c:BatchLayerFreeze (/ *error* acApp dwgName oShell oFolder path
dwgs layerName dbxDoc nomutt dwgName i
)
(princ "\rBATCHLAYERFREEZE ")
(defun *error* (msg)
(if nomutt
(setvar 'nomutt nomutt)
)
(if oShell
(vlax-release-object oShell)
)
(if dbxDoc
(vlax-release-object dbxDoc)
)
(cond ((not msg)) ; Normal exit
((member msg '("Function cancelled" "quit / exit abort"))) ; <esc> or (quit)
((princ (strcat "\n** Error: " msg " ** "))) ; Fatal error, display it
)
(princ)
)
(if
(and
(setq acApp (vlax-get-acad-object))
(setq dwgName (getvar 'dwgname))
(setq oShell (vla-getinterfaceobject
acApp
"Shell.Application"
)
)
(setq oFolder (vlax-invoke
oShell
'BrowseForFolder
(vla-get-hwnd acApp)
"Select folder to process:"
0
(+ 1 64 256)
)
)
(setq path (vlax-get-property
(vlax-get-property oFolder 'Self)
'Path
)
)
(setq dwgs (vl-directory-files path "*.dwg" 1))
(setq layerName
(getstring T
"\nEnter WCMATCH layer name(s) to freeze: "
)
)
(princ "\nWorking, please wait...")
(princ)
(setq dbxDoc (vla-getinterfaceobject
acApp
(strcat "ObjectDBX.AxDbDocument."
(substr (getvar 'acadver) 1 2)
)
)
)
(setq nomutt (getvar 'nomutt))
(setvar 'nomutt 1)
)
(progn
(foreach dwg dwgs
(if (/= dwg dwgName)
(progn
(vl-catch-all-apply
'vla-open
(list dbxDoc (setq dwgName (strcat path "\\" dwg)))
)
(setq i 0)
(vlax-for x (vla-get-layers dbxDoc)
(if
(and
(wcmatch (vla-get-name x) layerName)
(= (vla-get-freeze x) :vlax-false)
)
(if
(not
(vl-catch-all-error-p
(vl-catch-all-apply
'vla-put-freeze
(list x :vlax-true)
)
)
)
(setq i (1+ i))
)
)
)
(if (< 0 i)
(vla-saveas dbxDoc dwgName)
)
(setvar 'nomutt 0)
(prompt
(strcat "\n >> "
dwg
" >> "
(itoa i)
" layer"
(if (= 1 i)
""
"s"
)
" frozen "
)
)
(setvar 'nomutt 1)
)
)
)
(setvar 'nomutt 0)
(prompt "\nDone. \n")
(*error* nil)
)
(cond
(layerName
(*error*
"Unable to create \"ObjectDBX.AxDbDocument\" Object"
)
)
(path (*error* "No drawings found"))
(oShell (*error* "No folder selected"))
(dwgName
(*error* "Unable to create \"Shell.Application\" Object")
)
((*error*
"Unable to create \"AcadApplication Object\" Object"
)
)
)
)
)
Examples:
Code:
Command:
Command: BLAYFRZ
BATCHLAYERFREEZE
Enter WCMATCH layer name(s) to freeze: E-*
Working, please wait...
>> BLayFrz.Drawing1.dwg >> 99 layers frozen
>> BLayFrz.Drawing2.dwg >> 99 layers frozen
Done.
Command:
Command: BLAYFRZ
BATCHLAYERFREEZE
Enter WCMATCH layer name(s) to freeze: E-*
Working, please wait...
>> BLayFrz.Drawing1.dwg >> 0 layers frozen
>> BLayFrz.Drawing2.dwg >> 0 layers frozen
Done.
Command:
BLAYFRZ
BATCHLAYERFREEZE
Enter WCMATCH layer name(s) to freeze: e-*
Working, please wait...
>> BLayFrz.Drawing1.dwg >> 0 layers frozen
>> BLayFrz.Drawing2.dwg >> 0 layers frozen
Done.
Command:
BLAYFRZ
BATCHLAYERFREEZE
Enter WCMATCH layer name(s) to freeze: P-*
Working, please wait...
>> BLayFrz.Drawing1.dwg >> 100 layers frozen
>> BLayFrz.Drawing2.dwg >> 100 layers frozen
Done.
Command:
Command: BLAYFRZ
BATCHLAYERFREEZE
Enter WCMATCH layer name(s) to freeze: 0
Working, please wait...
>> BLayFrz.Drawing1.dwg >> 1 layer frozen
>> BLayFrz.Drawing2.dwg >> 0 layers frozen
Done.
Command:
Cheers