淞沪会战失败后,日军乘胜追击,南京保卫战摆在国民政府面前,蒋介石认为,南京孤城不能不守,但手下大多数将领都认为南京不可守,即便守也仅留少量部队,不宜与敌硬拼。
蒋介石说,南京是我们之首都,国父陵寝之所在地,必须防守,但没有人支持他的主张。而唐生智却高调陈词,大拍蒋介石马屁,表示愿担任防守责任与城共存亡,此后他成了南京保卫战的最高指挥官。
1937年11月24日蒋介石正式发布唐生智为南京卫戍司令长官,此后蒋介石一直留在南京,实际指挥南京保卫战,直至12月7日早晨离开南京。在日军完成对南京的合围时,蒋介石才把最高指挥权移交给了唐生智。
唐生智为了表示背水一战的决心,让交通部长俞鹏飞将下关原有的两艘大型渡轮撤走,并严令守卫浦口的国民党军队,制止从南京向长江北岸或由城内经挹江门撤往城外的部队和军人,如不听从可开枪射击。
南京保卫战一直打了五天,国民党军队在唐生智的指挥下付出了整营整连的牺牲,成千上万的国军弟兄坚决抵抗,直至战死。萧山令、朱赤、高致嵩、易安华、罗策群、姚中英等十余名师旅长壮烈殉国。
蒋介石看到部队与日军死拼伤亡惨重,于12月11日夜给唐生智发电,告诉他可相机撤退。唐生智考虑到由于自己曾力主固守,若突然先行撤走,怕其后责任难负,在卫戍司令部开会研究后,才决定于12日撤退。
由于时间紧迫、渡江交通工具有限,撤退最终成为了一场混乱。据统计,国民党军队渡江过程中被日军炸死和在江中淹死的超过了5万人,日军随后进行了连续六个星期惨绝人寰的南京大屠杀,遇难中国人达30多万。
唐生智成为了此次战败的替罪羊,1938年被免去一切职务,返回东安原籍,避居家乡闲居,蒋介石派宪兵予以"保护"。后来,蒋介石准备给他虚职衢州绥靖公署主任,他辞而不受。1949年他未随国民党去台湾,应程潜之请去长沙,号召反蒋,并领衔湖南各界通电向解放军起义,1950年他60岁时任中南军政委员会委员、湖南省人民政府副省长。