Fo each selected layer with mask individualy:
sTT = stringIDToTypeID; (ref = new ActionReference()).putEnumerated (sTT('layer'), sTT('ordinal'), sTT('targetEnum')); (dsc = new ActionDescriptor()).putReference(sTT('null'), ref) dsc.putString(sTT('name'), nme = activeDocument.activeLayer.name) executeAction(sTT('duplicate'), dsc); (ref = new ActionReference()).putEnumerated (sTT('layer'), sTT('ordinal'), sTT('backwardEnum')); (dsc = new ActionDescriptor()).putReference(sTT('null'), ref) executeAction(sTT('select'), dsc) ref = new ActionReference(), dsc = new ActionDescriptor() ref.putEnumerated(sTT('channel'), sTT('channel'), sTT('mask')) ref.putName(sTT('layer'), nme); dsc.putReference(sTT('null'), ref) executeAction(sTT('select'), dsc); (ref = new ActionReference()).putEnumerated (sTT('channel'), sTT('ordinal'), sTT('targetEnum')); (dsc = new ActionDescriptor()).putReference(sTT('null'), ref) dsc.putBoolean(sTT('apply'), true), executeAction(sTT('delete'), dsc); (ref = new ActionReference()).putEnumerated (sTT('layer'), sTT('ordinal'), sTT('targetEnum')); (dsc1 = new ActionDescriptor()).putReference(sTT('null'), ref); (dsc2 = new ActionDescriptor()).putString(sTT('name'), nme + '_Mask') dsc1.putObject(sTT('to'), sTT('layer'), dsc2) executeAction(sTT('set'), dsc1)