Naturally, some straightforward for-loops would do what you want without a bazillion lines of code that becomes unreadable.
I'm also a fan of the following, which goes through every clock combination and reports timing on the worst 50 false paths between them:
set npaths 50
set detail summary ;#summary path_only full_path
set ac [all_clocks]
foreach_in_collection clk1 $ac {
foreach_in_collection clk2 $ac {
set clk1_name [get_clock_info -name $clk1]
set clk2_name [get_clock_info -name $clk2]
report_timing -setup -npaths $npaths -detail $detail -from_clock $clk1_name -to_clock $clk2_name -panel_name "$clk1_name -> $clk2_name" -false_path
}
}
It takes a while to run, but you generally wouldn't do it that often. And of course the slacks are somewhat meaningless, since the requirements are based off unrelated clocks. That all being said, if you had a path that suddenly had 50ns of route on it, it would show up here.