ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

PowerShell中Claude Code会话恢复:--resume与--continue实操指南

2026/10/7 10:48:03 拓冰建站 浏览量
PowerShell中Claude Code会话恢复:--resume与--continue实操指南 先说结论能接而且恢复起来比你想象的简单。我自己就经历过这个场景——在PowerShell里开了一个Claude Code会话跟它聊了快一个小时的脚本重构眼看就要收尾结果手一滑把终端窗口直接关了。重新打开PowerShell盯着黑乎乎的窗口心里其实挺虚的刚才那些对话上下文还在吗还能不能让AI接着上次的话往下回答实际测试下来答案是对话没有丢上下文还在只要用对命令就能无缝接上。这篇文章就把Claude Code在PowerShell环境下的会话续接机制讲透包括为什么能恢复、具体怎么操作、PowerShell环境有哪些坑要避开以及一些我在实际使用中总结出来的习惯。1. 关掉终端后对话到底去了哪里1.1 先搞清楚“关掉”是哪种关法很多人的第一反应是终端窗口关了进程都杀了内存里的东西肯定全没了。这个直觉没错但Claude Code的会话记录不是一个只存在于内存里的临时状态它是忠实写盘的。不过“关掉”其实分几种情况影响不太一样。按我自己的经验可以分成这三种关闭方式当前正在生成的回答之前的历史对话能否恢复直接点窗口右上角的 X会丢还没写完不丢能用--resume或--continue在会话里按 CtrlC 中断会中断生成但已生成的部分不丢不丢能还在当前会话里输入/exit或按 CtrlD 正常退出不影响不丢能可以在下次恢复这里最关键的一点是每条消息在往返过程中都已经写入磁盘上的日志文件。也就是说你问一句“帮我写个脚本”这句问题本身会在发送给模型时被记录下来模型回答完回答内容也会落盘。终端窗口被关掉丢的只是“当前正在生成但那句话还没完全写完”的内容已经完成的历史对话全都安全躺在本地的存档文件里。1.2 从磁盘上直接找会话存档如果你对“对话到底存哪里”这件事好奇可以自己去看一眼。在Windows环境下Claude Code的会话存档位于%USERPROFILE%\.claude\projects\这个目录下面会有很多子目录每个子目录名对应一个项目路径的编码。比如你在D:\work\blog-backend目录下启动过Claude Code就能在projects目录里找到一个名字很像这个路径的文件夹进去之后是一堆.jsonl文件。.jsonl文件就是“对话录像带”每行一条JSON记录存着消息类型、时间、角色、内容等。为什么关掉之后能接着提问本质上就是Claude Code重新读取这些JSONL文件把你之前的对话历史恢复到了模型上下文里。提示在会话运行中输入/status能看到当前会话的编号也可以顺带确认这个会话对应的存档文件位置。我自己刚开始用的时候甚至手动打开过这些JSONL文件发现里面连带工具调用、文件编辑的记录都有完整程度比我想象中高很多。所以“关掉之后能不能接着提问”这件事在Claude Code的设计里根本不是一个问题反而是最基础的会话管理能力。2. 用 --resume 和 --continue 把对话拉回来2.1 最顺手的恢复命令claude --continue如果你刚才只开了一个会话关掉窗口之后想恢复最省事的命令是# 先回到刚才启动时的那个项目目录 cd D:\work\blog-backend # 恢复最近一次会话 claude --continue--continue可以简写成-c效果完全一样。这个命令的意思是把最近一次的会话记录读回来直接进入之前的对话上下文。需要注意的细节是--continue恢复的是“当前目录下”最近的一个会话。因为Claude Code的会话和项目目录是绑定的你在不同目录下跑claude --continue恢复出来的是不同项目的会话历史。所以别急着在任何目录下敲这个命令先cd到之前干活的那个项目根目录。我个人的习惯是如果当天只在一个项目里用Claude Code关掉后就直接claude -c一气呵成。恢复之后还可以直接问它“刚才那个问题你还没答完接着说”它会把之前的对话当成上下文来理解不需要你再复述任何背景。2.2 要手动挑会话claude --resume但很多时候你可能同时开了好几个会话一个在调脚本一个在写文档还有一个在讨论SQL优化。这时候再用--continue只能拿到最近的那个另外一个会话就显得有点“迷失”。解决办法是用带选择功能的恢复命令claude --resume运行之后界面上会列出一批历史会话带时间戳、项目路径、会话编号等信息你可以用方向键上下选择回车确认。如果你记得某个会话的编号也可以直接跳过选择claude --resume 1a2b3c4d5e6f7g8h这个用法我实际试过非常省事。尤其是当你手里已经有会话编号或者把编号写在笔记里的时候直接传参进去几秒钟就回到现场。还要提醒一点--resume在PowerShell里跑的时候如果终端用的是老旧的Windows控制台窗口方向键和列表显示有可能会出现错乱。建议直接把终端换成Windows Terminal或者在任何版本的VS Code里打开集成终端来跑兼容性问题会少非常多。命令作用适用场景claude --continue/claude -c恢复当前目录最近一次会话只开了一个会话关掉后想无缝接上claude --resume/claude -r列出所有历史会话选择恢复开了多个会话想手动指定具体哪一个claude --resume 会话ID直接恢复指定会话已经拿到会话编号想快速回到现场恢复不是“从头再来”而是把这个会话写入JSONL的上下文重新载入。也就是说你之前让它读过的文件、改过的代码、讨论过的方案它都还记得你可以从那句话的结尾处无缝继续往下问。3. PowerShell 环境里的几个坑和排查技巧3.1 乱码问题先把编码统一到UTF-8在Windows PowerShell里用Claude Code最容易遇见的不是“会话能不能恢复”而是好不容易恢复了输出却变成了一堆乱码。原因是Windows PowerShell 5.1默认的输出编码并不是UTF-8而Claude Code返回的内容很多都是UTF-8编码的两者一碰撞中文就碎了。解决办法有几种我推荐的是给PowerShell配置文件$PROFILE里加上这样一段# 让控制台正确显示UTF-8内容 [Console]::OutputEncoding [System.Text.Encoding]::UTF8 $OutputEncoding [Console]::OutputEncoding # 如果是Windows PowerShell 5.1也可以把代码页切到65001 chcp 65001 | Out-Null加完之后重启PowerShell再跑claude或claude --resume输出基本就不会出现中文乱码了。还有一条更省事的路径直接装PowerShell 7。它从底层就默认UTF-8对Claude Code这类现代命令行工具友好得多。很多在Windows PowerShell 5.1下跑出来的截断、乱码、交互卡顿问题换了PowerShell 7之后自动消失。注意如果你正在一个已经跑起来的会话里临时执行chcp 65001是不会对当前会话生效的需要在新的PowerShell窗口里设置完再启动Claude Code。3.2 执行策略、路径与WSL相关的报错PowerShell下还有一个高频问题跑安装脚本或者某些项目辅助脚本时提示“无法加载文件因为在此系统上禁止运行脚本”。这跟Claude Code本身没关系是PowerShell执行策略的限制。解决办法是把当前用户的执行策略放宽到允许本地脚本运行Set-ExecutionPolicy -Scope CurrentUser RemoteSigned注意是CurrentUser只影响当前用户不需要动系统级策略。这个操作是官方支持的安全策略调整没啥风险。另外热词里提到的“无法安全验证请在PowerShell中运行 wsl -- status”这类提示我在Windows下做开发时也见过。本质是某些工具会依赖WSL环境但WSL状态异常导致它校验失败。这时候不要干瞪眼直接在PowerShell里跑一下wsl --status wsl -l -v看看WSL是没启动、版本不对还是默认发行版没装。处理完再重试用Claude Code调用WSL相关功能。其实Claude Code本身不依赖WSL只是你让它执行的任务里可能间接用到了WSL里的命令把环境梳理清楚就好。还有一个小坑在Windows上如果你习惯在VS Code的集成终端里跑Claude Code实际上底层还是同一个PowerShell所以上面所有命令、编码设置、会话恢复逻辑全部通用。不需要因为换了宿主界面而重新学一套。4. 别只盯“续聊”把会话管理当成工作流来用4.1 会话语境的维护/clear 和 /compact 怎么配合会话说到底是有“容量上限”的。模型窗口能塞进去的上下文有限当你跟Claude Code聊得足够久代码片段、聊天记录、工具返回结果堆在一起迟早会顶到限制。很多人在PowerShell里跑着跑着突然收到400错误提示上下文过长往往就是这个问题。Claude Code提供了两个内置命令来管理上下文/clear清空当前会话的上下文但保留这个会话存档。相当于把黑板擦了重新开始写但之前那叠纸还在抽屉里。/compact把当前会话的历史内容压缩成一篇摘要然后继续使用同一会话。实际操作中我建议这样用如果你只是想“换个话题”但不想丢失整个会话存档用/clear。如果项目讨论还没结束只是历史内容太多导致上下文膨胀用/compact。举个例子有一次我让Claude Code连续改了七八个文件的代码后来还要让它继续改结果它开始频繁忘记前面文件的结构。我执行了一次/compact它把之前的文件结构和改动方案总结成一段摘要后续提问又顺畅了。我的观点是/clear更像是“归档重开”/compact才是“提炼续写”。想着“接着提问”的时候优先考虑/compact它能最大程度保住之前的讨论成果。4.2 多项目多会话的状态管理Claude Code的会话和项目目录强绑定。这意味着你在D:\work\project-a里开的会话在D:\work\project-b里用--resume是看不到的。这也倒逼你养成一个习惯按项目管理会话而不是按时间瞎开。拿我自己来说现在的工作流是多少个项目就建多少个会话每个项目固定一个主会话。每天开工先cd到项目目录然后claude --resume挑昨天的会话接着往下干。一个任务彻底结束或者上下文实在太大再考虑新开会话。有人会问那我能不能在PyCharm里用Claude Code我在这里统一回答一下Claude Code本质上是终端工具依赖交互式命令行PyCharm没有官方插件支持强行用外部终端配合也不是不行但体验不要抱太高期待。真正顺畅的路线是VS Code PowerShell集成终端或者纯粹用Windows Terminal。关于Codex和Claude Code这对竞品我也顺手用了一段时间。Codex同样有会话恢复能力但我在实际体验中更喜欢Claude Code的/compact和会话文件管理逻辑至少在大量代码工程场景下Claude Code对“长会话”的处理更成熟。如果你习惯在PowerShell里同时开多个会话Claude Code的这种按目录隔离、按ID恢复的方式会更接近IDE多窗口的感觉。5. 接入第三方模型与报错应对5.1 在配置里切换模型供应商很多接触过Claude Code的人会问能不能不直接使用官方接口而是把Claude Code接到其他模型服务上可以这也是热词里“claudecode接入deepseek”的来源。原理非常简单。Claude Code支持通过环境变量覆盖API接口地址和模型名称。在PowerShell里可以这样配置# 假设你用的是DeepSeek官方提供的兼容接口 $env:ANTHROPIC_BASE_URL https://api.deepseek.com/anthropic $env:ANTHROPIC_MODEL deepseek-chat $env:ANTHROPIC_API_KEY 你的API Key # 然后正常启动 claude设置之后Claude Code的终端UI、会话管理、resume机制完全不变只是底层对话由你指定的模型来响应。也就是说即使改了模型供应商“在PowerShell里开一个对话关掉后接着提问”这个能力依然有效因为会话存档逻辑在更上层跟具体模型是谁没有关系。有一点要提醒第三方兼容接口虽然打着“可直接替换”的旗号但不同模型的工具调用能力、指令遵循能力是有差异的。同一个会话语境从官方模型切到别的模型回答风格和质量可能会有波动。我建议在换模型之前用/status确认现在的模型配置避免稀里糊涂带着一堆预期跑到不合适的模型上。5.2 maximum context 报错的应对思路热词里还有个高频错误api error 400 maximum context。这英文翻译过来就是你这次请求携带的上下文内容超过了模型允许的最大窗口。这个报错我在Windows环境下遇到过不止一次尤其是给Claude Code贴超长日志、超长配置文件的时候。解决办法不是去调什么隐藏参数而是从源头控制上下文体积用/compact压缩历史把历史对话压成摘要释放出上下文空间再继续提问。新开会话并手动带要点如果旧会话压缩之后还是太重直接开启新会话把结论、当前文件路径、接下来要做什么用一两段话交代给Claude。别把大文件直接贴进对话让Claude Code去读取本地文件或者只贴关键片段。塞一堆原始日志进对话框既浪费窗口又容易触发400。这里有个窍门如果你要分析日志先把日志文件放到项目目录里然后让Claude Code用工具读取文件而不是复制粘贴全部内容。读取操作可以分段执行上下文占用比一次性贴几十万字符低得多。这个习惯能让你少踩很多次400的坑。6. 常见问题排查速查表最后把我在PowerShell里用Claude Code遇到的典型问题整理成一张速查表方便以后遇到直接对着查。现象可能原因解决办法关掉PowerShell后找不到刚才的会话所在目录不对或者用了--continue却想恢复非最近的会话先cd到项目根目录用claude --resume选择具体会话中文输出乱码Windows PowerShell 5.1编码不兼容UTF-8执行chcp 65001或在$PROFILE里设置UTF-8输出最省事是换PowerShell 7被提示禁止运行脚本PowerShell执行策略限制Set-ExecutionPolicy -Scope CurrentUser RemoteSigned提示需要WSL验证但不知道状态WSL服务或发行版异常wsl --status和wsl -l -v查看状态修复后再继续api error 400 maximum context上下文超过模型窗口上限/compact压缩或新开会话并只带关键信息避免直接贴超长文本想挑指定会话但方向键无效旧终端交互兼容性差改用Windows Terminal或VS Code集成终端PyCharm里找不到Claude Code插件官方没有针对PyCharm的插件改用VS Code集成终端或不依赖IDE直接用Windows Terminal附加一个容易被忽略的点如果你把终端从PowerShell切到cmd或者从Windows Terminal换到别的终端程序--resume历史会话列表依然存在因为这些会话存档都集中在.claude\projects下不会因为终端程序不同而分离。真正影响会话归属的只有“当前项目目录”这一条。我个人现在的工作习惯是每次收工前在会话里敲一次/status把会话编号记到项目笔记里。这样第二天打开PowerShell直接claude --resume 会话ID一步到位。不要等窗口关了才凭记忆找会话那才是真正浪费时间的地方。工具本身给你留好了“每次对话都能续上”的能力剩下的就看你会不会利用它了。