To my understanding each open dwg has its own lisp environment and you can't send things between them through lisp (could be wrong on that, but I've done a fair bit of research trying to get that to happen and I haven't found anything).
For executing lisp across multiple dwgs I use a lisp that writes an AutoCAD script and then calls it, and the script opens each dwg, loads the desired lisp routine, runs the routine, and then usually saves and closes the dwg. There are some drawbacks to this approach, such as the dwgs must be closed when the script tries to open them (otherwise CAD will ask if you want a read-only copy opened and that will interrupt the script), and scripts are more sensitive to some kinds of errors (I've had situations where the lisp routine wants to update a block definition but not insert an actual copy of the block, so it did a (command "-insert" "blockname=blockfile.dwg" nil) which works fine in a lisp and generates no errors, but in a script it sees the nil on a command and aborts the script).
So it doesn't quite do what you want in the sense you can't do it on all open drawings (unless you're more proficient at scripting than I and can write a script to change focus and continue executing), but if this approach interests you then you can find a great template dialog box written by Lee-Mac here:
http://www.lee-mac.com/getfilesdialog.html
Which I have then modified several times for different purposes, adding various things to the dcl portion so the users can select whatever options are relevant to that routine, and then processing that information at the end by adding a handler similar to this:
(setq scriptFile (open "C:\\Program Files\\AutoCAD\\Support\\batchPlot.scr" "W"))
(foreach dwgname rtn ;for each drawing on the list of drawings to be processed
;add to the script commands to open the file then perform a multi plot without prompts
(princ (strcat "_.open \"" dwgname "\" (load \"W:\\\\RUDDS-CAD\\\\LISP\\\\PLOT-REVIEW.lsp\") (PLOT_REVIEW_MULTI ") scriptFile)
(cond
((= pltA0 "1");if plot A0 was selected add to the script the plotting routine
(princ "\"A0\" " scriptFile)
)
((= pltA1 "1");if plot A1 was selected add to the script the plotting routine
(princ "\"A1\" " scriptFile)
)
((= pltA2 "1");if plot A2 was selected add to the script the plotting routine
(princ "\"A2\" " scriptFile)
)
((= pltA3 "1");if plot A3 was selected add to the script the plotting routine
(princ "\"A3\" " scriptFile)
)
((= pltB1 "1");if plot B1 was selected add to the script the plotting routine
(princ "\"B1\" " scriptFile)
)
)
(cond
((= POrange "1") (princ "\"orange\"" scriptFile))
((= PBlue "1") (princ "\"blue\"" scriptFile))
((= PGrey "1") (princ "\"grey\"" scriptFile))
((= PRed "1") (princ "\"red\"" scriptFile))
)
(cond
((= pltMono "1")
(princ " \"MONO\") " scriptFile)
)
((= pltTrueColour "1")
(princ " \"TRUE\") " scriptFile)
)
((= pltFullColour "1")
(princ " \"FULL\") " scriptFile)
)
)
(if (= tskClose "1");if close the files was selected add to the script to save and close
(princ "_.qsave _.close " scriptFile)
)
)
(close scriptFile);close the editing of the script file
(command "_.script" "C:\\Program Files\\AutoCAD\\Support\\batchPlot.scr");run the script file
It's a bit messy, but I've found it incredible as a time saver for processing multiple dwgs quickly and consistently.
If you're interested in this approach and want some examples of a fully modified version of Lee-Mac's program let me know.