If you have some old projects with un-billed time and expenses, they will appear in the Create Batch Invoice screen. You can prevent this by un-approving or deleting all those time and expense entries. You can also mark those entries as billed from the Time Entries and Expense Entries screen so they don't show up for billing. Another option is to change the project status to Hold or Cancelled from the Projects screen. Those projects won't show up in any drop-downs unless you change their status back to Active.
In case of projects that reach their contract amount and are billed 100%, you can apply the rule in Global Settings > Billing to mark projects as completed when they are billed 100%. On top of that, you can apply the rule to prevent time entries when the contract amount is reached. This can be done from Projects > General > Rules & Contacts.