Opener Smriti Mandhana starred for India, smashing 61 off just 32 balls, and Jemimah Rodrigues made an unbeaten 44 as they made a challenging 164-5 at Birmingham’s Edgbaston ground.
England were in with a chance with captain Nat Sciver (41) and Amy Jones (31) at the crease but both were run out in the desperate scramble for runs.
England finished on 160-6 off their 20 overs.
India’s Sneh Rana took 2-28 in her four overs while Deepti Sharma conceded just 18 runs in her spell.
India will face either Australia or New Zealand in Sunday’s final, with England meeting the loser of that match for bronze.