public static void Main()
var lastRun = new DateTime(2020, 05, 01);
var runHours = new (int Start, int Length)[] {
var daysToRun = DateTime.Today.Subtract(lastRun).Days;
var datesToRun = Enumerable.Range(0, daysToRun).Select(d => lastRun.AddDays(d));
var timesToRun = datesToRun.Select(d => runHours.Select(h => new {
Start = d.AddHours(h.Start),
End = d.AddHours(h.Start).AddHours(h.Length)
Console.WriteLine($"Created {timesToRun.Sum(t => t.Count())} timeslots\n");
var commandTemplate = @"REM C:\Source\BottomlineManualRun\Bottomline.exe ""{0:yyyy-MM-dd HH:mm:ss}"" ""{1:yyyy-MM-dd HH:mm:ss}""";
foreach (var dayToRun in timesToRun) {
.Where(t => t.Start.Hour != 0)
.Select(t => String.Format(commandTemplate, t.Start, t.End));
Console.WriteLine(String.Join("\n", commands));
var offHourSlots = timesToRun.SelectMany(t => t).Where(t => t.Start.Hour == 0).Select(t => String.Format(commandTemplate, t.Start, t.End));
Console.WriteLine(String.Join("\n", offHourSlots));