李世民派行军总管史万宝从宜阳往南占据龙门,刘德威从太行往东包围河内,王君廓从洛口斩断敌军运粮通道。又派黄君汉连夜从孝水河中下舟船偷袭回洛城,攻克了回洛城。黄河以南,没有一个地方不响应,城堡一个接一个前来归降,大军进驻邙山。九月,李世民用五百骑兵先行观察战场地势,终于与王世充一万多人相遇,两军交战,李世民再次打败了他,斩首级三千,俘虏了王世充大将陈智略,王世充仅仅本人逃脱。他所部署的筠州总管杨庆派使者请求归降,李世民宗派李世勣率军从頧辕道出去安抚杨庆的部众。荥、汴、洧、豫九州一个一个前来归降。王世充于是向窦建德求救。 [26]
武德四年(621年)二月,李世民又进驻青城宫,营垒尚未建立,王世充的军队二万人从方诸门面临谷水扎阵。李世民以精锐骑兵在北邙山扎阵,令屈突通率五千步兵渡水攻击王世充,并趁机告诫屈突通道:“等到双方交战时就放烟,我当率骑兵南下。”双方军队才接战,李世民用骑兵冲锋,自己挺身冲锋在前,与屈突通里外呼应。敌军拼死作战,多次被打散又多次聚合。 [27] 从早晨一直战到下午,敌军才开始退却。李世民指挥兵士追击,俘获、斩首共八千人,于是进兵屯营到城下。王世充不敢再出战,只是环城自守,以等待窦建德救援。李世民派遣诸军挖掘壕沟,环绕布置长期围守。吴王杜伏威派遣他的大将陈正通、徐召宗率精兵二千人前来在李世民军营会合。伪郑州司马沈悦以虎牢关来投降,将军王君廓响应,活捉伪荆王王行本。
恰巧窦建德率兵十余万来援救王世充,到达酸枣。萧瑀、屈突通、封德彝都因为腹背受敌,恐不是万全之策,请求退师到谷州观看形势。李世民道:“王世充粮食已尽,内外离心,我军不需攻击,可以坐收敌军破败之功。窦建德新近攻破孟海公,将官骄傲士兵怠惰,我军当进攻占据武关,扼守山川要冲。敌军假若与我军争胜负,我攻破敌军是必然的了。如果不战,十日之间王世充当会自我崩溃。若不急速进攻,敌军进入武牢,诸城刚刚归附,必定不能坚守。他们两方力量合并,还能把他们怎么办呢?”屈突通又请求解围到险要之处以等候敌军内部生变,李世民不同意。于是留屈突通辅助齐王李元吉以包围王世充,李世民亲自率领骑兵三千五百人奔赴武牢。 [29]
窦建德从荥阳西上,筑营垒在板渚,李世民驻军在武牢,两军对峙二十多天。探听消息的人报告道:“窦建德探听到我军牲畜的饲料已尽,等候在黄河北岸放马吃草时,趁机偷袭武牢。”李世民知道他们的阴谋,于是放马在黄河北岸吃草来诱敌。早晨,窦建德果然率全部兵马到来,陈列军队在汜水之上,王世充大将郭士衡扎阵在南面,绵延数里,大声呐喊,诸将大为恐惧。 [30] 李世民率几名骑兵登上高高的土丘遥望敌军,对诸将道:“贼人起兵山东,没有遇见过强大的敌人。现在渡过险要之处而叫嚣,这是没有政令的表现;逼近城墙扎阵,有轻视我们的思想。我按兵不出,敌军气势便衰竭,扎阵太久士卒饥饿,必将自我撤退,这时再来追击,可以无往而不胜。