李秀成的部隊在4月初從常熟撤圍後,從江浦的新河口再次向江北攻擊,然後向西挺進,打到了安徽的六安,即將進入湖北。

李秀成離開江蘇,使湘淮軍少了一個勁敵。李鶴章和程學啟率部攻擊太倉。駐守在這裏的天國會王蔡元向湘淮軍請降。

4月26日,李鶴章和程學啟所部嚴陣以待,準備受降。李鶴章率部渡河,正要入城,忽見一支太平軍裹著白頭巾從東南門奔出,向李鶴章的部隊殺來。李鶴章急令部隊後撤,但已來不及,部隊有幾百人陣亡,李鶴章腳上受傷,差一點丟了性命。

程學啟的部隊剛剛把守住西門,忽見太平軍的幾十艘戰船從昆山駛來,船上的太平軍與城內的太平軍交談,語氣神態十分親密。程學啟頓時起了疑心,留心提防。

果然,城內一千名太平軍衝殺出來,程學啟率部奮力抵抗,將太平軍擊退。

李鴻章接到警報,令劉秉璋率部援救李鶴章,又調常勝軍去太倉增援。

4月29日,程學啟率部會同歐陽利見的水師部隊逼近西門,常勝軍搗毀南門的關卡。

5月1日,戈登將大炮排列在程學啟營前,開炮轟擊,擊毀兩座石壘。

5月2日,戈登下令開炮轟擊城牆。黃昏前,城牆裂塌,太平軍從南門逃走,無法出門,除陣亡者以外,幾乎全被俘虜。湘淮軍進占太倉。

5月8日,郭嵩燾轉授兩淮鹽運使。

程學啟和戈登的部隊西進昆山,連攻兩天,沒有戰果。戈登率領常勝軍暫時返回鬆江。程學啟率部駐紮昆山東門,令劉士奇的部隊駐紮北門,周良才的部隊扼守周市。

5月25日,周良才部在周市擊敗太平軍。5月28日,程學啟令周良才部襲擊太平軍後方,劉士奇的部隊分左右兩路進攻,程學啟率領親兵隨後跟進。

常勝軍從鬆江到來,開炮支援。激戰一整天,程學啟的部隊攻破太平軍的二十四座壁壘,斬殺近萬名太平軍。

戈登建議一鼓作氣,攻下昆山。程學啟說:“昆山三麵有水環繞,陸路可通蘇州,必須經過正儀。我們先攻占正儀,阻截援軍,斷絕昆山守軍的退路,一定可以攻破昆山!”

5月30日,程學啟約郭鬆林等將領出兵,從水陸兩路攻打正儀,常勝軍隨後趕到,鏖戰中斬殺三千名太平軍。占領正儀之後,程學啟留下陳有升等部駐守。

譚紹洸見昆山危急,調集四萬兵力前來救援。程學啟令郭鬆林等部會同水師扼守隘口,派周良才等部駐紮在北門橋,派何安泰部扼守東門,自己率部在正儀大道上阻截。

戰到黃昏,譚紹洸派出所有精銳部隊從小西門出擊,中了埋伏,返回城內。程學啟調動各路兵力強攻,於5月31日攻克昆山,譚紹洸從陽澄湖上逃遁。

此戰以後,郭鬆林升任總兵。