This will get the job done with ArcGIS (most likely can be done with shorter/better code):
import os, arcpy
from datetime import datetime, time
print "Running script..."
arcpy.env.outputCoordinateSystem = r"D:\Projektionsfiler\SWEREF99TM.prj"
arcpy.env.geographicTransformations = "SWEREF99_To_WGS_1984_1"
#workspaces
arbetsmapp = r'D:\S2'
utdatamapp = r'D:\S2\utdata'
#the color bands to be composited
filandelse = ["B08.jp2", "B04.jp2", "B03.jp2"]
#lists rasters with file paths that end with filandelse
lista = [os.path.join(dirpath, f)
for dirpath, dirnames, files in os.walk(arbetsmapp)
for f in files if f.endswith(tuple(filandelse))]
#reverse list from ...B03.jp2, 04, 08 to 08 04 03 (red green blue)
lista.reverse()
#Divide list in parts of three
listaomtre = zip(*[iter(lista)]*3)
#Run composite bands
for grupp in listaomtre:
starttid = datetime.now()
arcpy.CompositeBands_management(in_rasters=grupp, out_raster=os.path.join(utdatamapp,grupp[-1][-13:-8])+".tif")
sluttid = datetime.now()
tidsatgang = sluttid-starttid
print "Finished raster " + grupp[-1][-13:-8] + " in " + str(tidsatgang.seconds) + " seconds"
print "Script complete"