hmmm sure… basically just another print if the file did load, but dialogs -were- detected.
global batch_file
global f_error
fn handleBox =
(
local windowHandle = DialogMonitorOPS.GetWindowHandle()
if (windowHandle != 0) then
(
local title = UIAccessor.GetWindowText WindowHandle
format " Window Title: %
" title to:f_error
format " Window Body:
" to:f_error
local children = UIAccessor.getChildWindows windowHandle
for child in children do
(
format " %
" (UIAccessor.getWindowText child) to:f_error
)
--local error = UIAccessor.GetWindowDllDescription WindowHandle
UIAccessor.PressDefaultButton()
true
)
else ( false )
)
rollout BatchRollout "Batch Export" width:341 height:158
(
button btn15 "Source" pos:[13,13] width:96 height:24
button btn17 "Export" pos:[10,110] width:323 height:35
edittext edt11 "" pos:[121,13] width:206 height:24
fn getFilesRecurse dir =
(
direc = GetDirectories (edt11.text + "\\*")
for d in direc do
(
join direc (GetDirectories (d+ "\\*"))
)
append direc (edt11.text + "\\") -- Need to include the original top level directory
maxfiles = #()
for de in direc do join maxfiles (getFiles (de + "*.max"))
------------------
DialogMonitorOPS.unRegisterNotification id:#hello
-----------------
for f in maxfiles do
(
DialogMonitorOPS.RegisterNotification handleBox id:#hello
DialogMonitorOPS.Enabled = true
f_error = stringStream ""
if (loadMaxFile f == true) then
(
if (filePos f_error != 0) then (
format "%
" f to:batch_file
format " ERRORS/WARNINGS WHILE LOADING:
" to:batch_file
format "%
" (f_error as string) to:batch_file
)
fname = getFilenameFile(f) + ".bin"
exportFile fname #noprompt
continue
)
else
(
format "%
" f to:batch_file
format " FAILED TO LOAD:
" to:batch_file
format "%
" (f_error as string) to:batch_file
)
)
)
on btn15 pressed do
(
source_dir = getSavePath()
edt11.text = (source_dir as string)
)
on btn17 pressed do
(
batch_file = createFile (edt11.text + "\\batchLog.txt")
getFilesRecurse edt11.text
close batch_file
DialogMonitorOPS.unRegisterNotification id:#hello
DialogMonitorOPS.Enabled = false
)
)
createDialog BatchRollout 341 158
Which gives output (example):
c:\zort\\fail.max
FAILED TO LOAD:
Window Title: 3ds Max
Window Body:
OK
File Open Failed: c:\zort\fail.max
c:\zort\\grass11.max
ERRORS/WARNINGS WHILE LOADING:
Window Title: Missing External Files
Window Body:
Continue
Browse
Don't Display This Message at Render Time
Note that this doesn’t actually list the missing external files; that specific dialog could be detected (check for the title) and the missing external files be gathered and added to the error string using some of the other 3ds Max functionality, though…
Edit: in fact, with newish 3ds Max versions, just use the “missingExtFilesAction:”[font=Verdana] and similar keywords, passing a by-reference variable that will get an array of the missing files (there’s others for XRefs, etc.). Much easie 
Edit 2: Then again, that requires quiet mode - which supresses any of those other dialogs.
[/font]