It would be wise to use an AI Script rather than triggers because ordering units to attack move will result in units refusing to follow orders or returning to their spawn location as you already know.
Anyway, here's the AI that blizzard used in the last mission of the TFT orc campaign.
JASS:
//==================================================================================================
// $Id: o03Bx09.ai,v 1.3 2003/09/02 16:30:41 smercer Exp $
//==================================================================================================
globals
integer user = 4
endglobals
function main takes nothing returns nothing
call CampaignAI(HOUSE,null)
call PrepFullSuicide()
loop
loop
exitwhen CommandsWaiting() == 0
set user = GetLastCommand()
call PopLastCommand()
endloop
call SuicideUnitB(FOOTMAN,user)
call SuicideUnitB('h004',user)
call SuicideUnitB(RIFLEMAN,user)
call SuicideUnitB('h005',user)
call SuicideUnitB(KNIGHT,user)
call SuicideUnitB('h006',user)
call SuicideUnitB('h007',user)
call SuicideUnitB('nchp',user)
call SuicideUnitB('nhym',user)
endloop
endfunction
To explain:
This represent the player which the AI has to attack. For example here 4 is Player (4) Purple
JASS:
call SuicideUnitB(FOOTMAN,user)
This tells the AI which unit it will send to attack. FOOTMAN is a constant that you can find inside Common.ai and 'h004' is a rawcode that you can find by pressing CTRL + D in the Object Editor.
Using an AI is ten times better because you don't have to worry about creating thousands of regions and ordering units to attack them using triggers. The AI will automatically find all the enemies on the map and attack them. You just need to edit the script above with a text editor and import it to your map.