日本原本打算在上海附近消灭中国军队的主力,从而迫使中国国民党政府屈服。然而,日本上海派遣军在淞沪战场苦战三个月,受到了惨重的损失,日本决策层在是否直接进攻南京的问题上产生了分歧。因为顾虑苏联在北方的军事威胁,日军参谋本部次长多田骏等人主张“不扩大”战事。因此,11月7日东京将上海派遣军与第10军临时编组为华中方面军的时候,将方面军的作战区域限制在苏州、嘉兴一线(即“制令线”)以东。
而日军战地指挥官却强烈要求进攻南京:15日,柳川平助的第10军无视参谋本部的命令,决定趁中国军队溃退“独断敢行”地“全力向南京追击”;22日,方面军司令官松井石根鼓动参谋本部放弃“不扩大”方针,称“为了使事变迅速解决,乘现在敌人的劣势,必须攻占南京”。
11月下旬,日军上海派遣军和第10军全面越过“制令线”,分别沿着太湖的南、北两侧开始向常州、湖州进攻。鉴于前线进展迅速的既成事实,24日东京大本营废除了“制令线”,并在12月1日下达了攻占南京的正式命令。
进攻南京的作战开始后不久,疯狂前进的作战部队就把辎重部队抛在身后,由于日军原本没有深入内陆作战的后勤准备,部队立即面临着粮食供给中断的严重问题,日本军司令部于是下达了实际是要部队抢劫的“就地征收”命令。日军在抢劫中通常伴随着奸淫妇女的暴行,为了掩盖自己抢劫和强奸的罪恶,日军除了杀死受害人,经常放火烧毁整个村庄。
1937年12月8日,日军全面占领了南京外围一线防御阵地,开始向外廓阵地进攻。11日晚,蒋介石通过顾祝同电告唐生智“如情势不能久持时,可相机撤退,图整理而期反攻”。
12日,日军第6师团一部突入中华门但未能深入,其余城垣阵地还在中国军队手中。负责防守中华门的第88师师长孙元良擅自带部分部队向下关逃跑,虽被第36师师长宋希濂劝阻返回,但已经造成城内混乱。下午,唐生智仓促召集师以上将领布置撤退。
按照撤退部署,除第36师掩护司令部和直属部队从下关渡江以外,其他部队都要从正面突围,但唐生智担心属于中央军嫡系在突围中损失太大,又口头命令第87师、第88师、第74军和教导总队“如不能全部突围,有轮渡时可过江”,这个前后矛盾的命令使中国军队的撤退更加混乱。
会议结束后,只有属于粤系的第66军和第83军在军长叶肇和邓龙光带领下向正面突围,在付出巨大代价后成功突破日军包围,第159师代师长罗策群战死。其他部队长官大多数没有向下完整地传达撤退部署,就各自抛下部队前往江边乘事先控制的船只逃离。
这些部队听说长官退往下关,以为江边已经做好了撤退准备,于是放弃阵地涌向下关一带。负责封锁挹江门的第36师没有接到允许部队撤退的命令,和从城内退往下关的部队发生冲突,很多人被打死或踩死。
12日晚,唐生智与司令部成员乘坐事先保留的小火轮从下关煤炭港逃到江北,此后第74军一部约5000人以及第36师也从煤炭港乘船过江,第88师一部和第156师在下关乘自己控制的木船过江。逃到下关的中国守军已经失去建制,成为混乱的散兵,其中有些人自己扎筏过江,很多人淹死、或是被赶到的日军射杀在江中。大部分未能过江或者突围的中国士兵流散在南京街头,不少人放弃武器,换上便装躲入南京安全区。
13日晨,日军攻入南京城,开始了长达四十多天的南京大屠杀。