You simply need to query your custom fields and return them with your shortcode:
// EXAMPLE USAGE:
// [loop the_query="showposts=100&post_type=page&post_parent=453"]
function custom_query_shortcode($atts) {
// Defaults
extract(shortcode_atts(array(
"the_query" => ''
), $atts));
// de-funkify query
$the_query = preg_replace('~�*([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $the_query);
$the_query = preg_replace('~�*([0-9]+);~e', 'chr(\\1)', $the_query);
// query is made
query_posts($the_query);
// Reset and setup variables
$output="";
$temp_title="";
$temp_link = '';
// the loop
if (have_posts()){
while (have_posts()){
the_post();
$temp_title = get_the_title($post->ID);
$temp_link = get_permalink($post->ID);
//get you custom fields
$duration = get_post_meta( $post->ID, 'duration', true );
$other_custom_field = get_post_meta( $post->ID, 'other_custom_field_key', true );
//add the custom field to the output var
$output .= "<li><a href="https://wordpress.stackexchange.com/questions/139230/$temp_link">$temp_title</a> Duration: $duration, Other: $other_custom_field</li>";
}
}else{
$output .= "nothing found.";
}
wp_reset_query();
return $output;
}
add_shortcode("loop", "custom_query_shortcode");