One way to do that is to use gcloud's keys and flags: projections, --format, --filters. To read more directly from the terminal use gcloud topic, for example:
gcloud topic projections
In order to see what fields/properties are available use --format=flattened, like:
gcloud app services list --format=flattened
For the sake of simplicity I will leave outside everything but gcloud. 
for SERVICE in $(gcloud app services list --format='table[no-heading](id)'); do
    echo "for service $SERVICE :"
    RECENT=$(gcloud app versions list --format='table[no-heading](id)' --filter="service=$SERVICE" | tail -n1)
    echo 'y' | gcloud app versions start $RECENT
    VERSIONS=$(gcloud app versions list --format='table[no-heading](id)' --filter="service=$SERVICE AND version.servingStatus=SERVING AND NOT id=$RECENT" | tr '\n' ' ')
    echo 'y' | gcloud app versions stop $VERSIONS
done
'table[no-heading](service)' outputs a table without heading, which is set in brackets,  and a single column with service IDs, which is set in parentheses.
--filter="service=$SERVICE AND version.servingStatus=SERVING AND NOT id=$RECENT" will only show versions from indicated service that are serving, except the one indicated by RECENT.
Additionally, if you would want to use dates for filtering:
gcloud app versions list --format='table(id, version.servingStatus, version.createTime.date(format="%s"))' --filter="service=default" --sort-by="~version.createTime"
version.createTime.date(format="%s") is a function date converting version.createTime.date into the number of seconds since the Epoch.
%s comes from strftime(3) and returns dates in Epoch format which is easier to understand and compare.
--sort-by="~version.createTime"sorts by creation date and because of ~ in descending order.