List.Generate to the rescue:
merge_loop = List.Generate(
() => #"Renamed Columns2",
(tbl) => Table.IsEmpty(Table.SelectRows(tbl, each [OBJECT_ID] = _TargetFolder)),
(tbl) => let
#"Merged Queries" = Table.NestedJoin(tbl, {"OBJECT_ID"}, AllFolders, {"PARENT_ID"}, "AllFolders", JoinKind.LeftOuter),
#"Expanded AllFolders" = Table.ExpandTableColumn(#"Merged Queries", "AllFolders", {"OBJECT_NAME", "OBJECT_ID"}, {"OBJECT_NAME.1", "OBJECT_ID.1"}),
#"Added Custom" = Table.AddColumn(#"Expanded AllFolders", "Path.1", each [Path]&"\"&[OBJECT_NAME.1]),
#"Removed Other Columns" = Table.SelectColumns(#"Added Custom",{"Path.1", "OBJECT_ID.1"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Other Columns",{{"OBJECT_ID.1", "OBJECT_ID"}, {"Path.1", "Path"}})
in
#"Renamed Columns"
),
non_empty_tbl = Table.SelectRows(
List.LastN(merge_loop, 1){0},
each [OBJECT_ID] = _TargetFolder
),