I would create one script to duplicate each data extension, you can use [WSProxy to do this][1] (Retrieve DE info call, Retrieve Fields call then Create DE call). During this creation, I would make sure to save the names of the DEs created inside of another DE for reference in the second script.

Your second script would then [create][2] and [perform][2] query activities to fill in these data extensions. You will likely need to create a For loop based off the DE holding your newly created DE names to ensure you create and execute accordingly.

Simple example of the create then execute script for Query:

    <script runat="server">
    Platform.Load("Core","1.1") ;
    
    var deName = {{yourTargetDEName}}
    
    var queryName = {{yourQueryName}}
    
    var queryDef = { Name : queryName,
    
    CustomerKey : queryName,
    TargetUpdateType : "Overwrite",
    TargetType : "DE",
    
    Target:{
    Name: deName,
    CustomerKey : deName
    },
    QueryText : "SELECT {{myField}} FROM {{mySourceDE}}"
    };
    
    var status = QueryDefinition.Add(queryDef);
    
    sleep(3000); //Wait for 3 seconds
    //This helps ensure creation is complete before attempting to execute
    
    var qd = QueryDefinition.Init("myQueryDef");
    var status = qd.Perform();
    
    
    function sleep(milliseconds) {
      var start = new Date().getTime();
      for (var i = 0; i < 1e7; i++) {
        if ((new Date().getTime() - start) > milliseconds){
          break;
        }
      }
    }
    </script>

Now there are things to consider while doing this in that you will have 15 Queries targeting the same source DE, so you may run into issues there - but with some adjustments and customization, you can get this going to automate your process.


  [1]: https://gortonington.com/wsproxy-to-copy-a-data-extension/
  [2]: https://salesforce.stackexchange.com/questions/227206/creating-query-definition-with-ssjs