VSCODE CLAUDE CODE

bash 复制代码
Error: Claude Code on Windows requires git-bash ......

参照网络上的添加环境变量的方法,发现还是不行,几乎试遍了网络上关于环境变量设置的这种方法,行不通。

关键发现,PowerShell 中无法获得 git,但是在 CMD 终端中可以获得:

bash 复制代码
PS C:\Users\28581> git --version
git : 无法将"git"项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,
然后再试一次。
所在位置 行:1 字符: 1
+ git --version
+ ~~~
    + CategoryInfo          : ObjectNotFound: (git:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

PS C:\Users\28581> Get-Command where.exe

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Application     where.exe                                          10.0.26... C:\windows\system32\where.exe


PS C:\Users\28581> Get-Command git
Get-Command : 无法将"git"项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路
径正确,然后再试一次。
所在位置 行:1 字符: 1
+ Get-Command git
+ ~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (git:String) [Get-Command], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException,Microsoft.PowerShell.Commands.GetCommandCommand

CMD 可以

bash 复制代码
C:\Users\28581>git.exe --version
git version 2.53.0.windows.1

C:\Users\28581>where.exe bash
D:\program\Git\bin\bash.exe
C:\Windows\System32\bash.exe
D:\program\w64devkit\bin\bash.exe
C:\Users\28581\AppData\Local\Microsoft\WindowsApps\bash.exe

C:\Users\28581>

原因:

bash 复制代码
Ran terminal command: Get-Command git.exe -All; Get-Command "D:\program\Git\cmd\git.exe"; $env:PATHEXT

原因找到了:PowerShell 里的 PATHEXT 只有 .CPL,没有 .EXE,所以 git 这样的可执行文件不会被当作命令解析(git.exe 能找到就是这个原因)。

临时修复(当前 PowerShell 会话内生效):

powershell 复制代码
$env:PATHEXT = ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL"

永久修复(写入用户环境变量,重启 VS Code 生效):

powershell 复制代码
[Environment]::SetEnvironmentVariable(
  "PATHEXT",
  ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL",
  "User"
)

本质原因是:PowerShell 在解析"无扩展名"的命令时,依赖 PATHEXT 来决定哪些扩展名算"可执行"。

你这个会话里 PATHEXT 只有 .CPL,所以 git 不会被当成可执行文件来匹配;而 git.exe(带扩展名)可以直接命中,所以能找到。

原理简述:

  • Windows 有两步:先在 PATH 里找;找到后再根据 PATHEXT 判断是否可执行。
  • cmd 自己有一套默认的 PATHEXT(包含 .EXE),所以在 cmd 里正常。
  • PowerShell 会直接用当前环境变量 PATHEXT,被污染成只剩 .CPL 时,等于"只允许控制面板项",普通 exe 都不会被当作命令。

正在优化工具选择...是"拼接"的,但更准确说是"合并 + 覆盖"。机制简化如下:

1) PowerShell 的命令解析流程(核心点)

当你输入 git

  • PowerShell 先找函数/别名/脚本。
  • 找不到就去 PATH 里找可执行文件。
  • 能被当作"可执行"的文件后缀由 PATHEXT 决定。
    • 如果 PATHEXT.EXE,它就会尝试 git.exe
    • 不含 .EXE,它就根本不会尝试 git.exe,于是报"找不到命令"。

2) PATHEXT 的"拼接"逻辑

Windows 环境变量有 系统级用户级 两份。

  • 最终会话里的值是 "系统值 + 用户值" 组合 ,但如果用户级显式设置了同名变量,会把系统值覆盖,而不是自动追加。
  • 也就是说:如果系统里是 .COM;.EXE;...,用户里被错误设置成 .CPL,最终就只剩 .CPL

3) 为什么 CMD 还能用

CMD 的查找逻辑更宽松,往往还能直接命中 git.exe,所以看起来"CMD 能用,PowerShell 不能用"。

结论

你的问题不是 Git 缺失,而是 PowerShell 依赖的 PATHEXT 被用户级环境变量覆盖成了错误值

如果你想,我可以帮你确认:

  1. 用户级/系统级 PATHEXT 分别是什么
  2. 是不是 profile 脚本改了它
相关推荐
VidDown12 天前
VidDown 工具站:免费、本地优先的开发者工具箱
javascript·编辑器·音视频·视频编解码·视频
摇滚侠12 天前
IDEA 创建 Java 项目 手动整合 SSM 框架
java·ide·intellij-idea
霸道流氓气质12 天前
Trae IDE 新手入门指南
ide
VidDown12 天前
显卡处理视频技术详解:从硬解码到 NVENC,GPU 如何让视频处理起飞?
javascript·编辑器·音视频·视频编解码·视频
夜猫逐梦12 天前
【UE基础】03.蓝图与编辑器工作流
编辑器·ue·蓝图·ue编辑器
VidDown12 天前
视频帧率技术详解:从 24fps 到 120fps,帧率如何影响你的观看体验?
网络·网络协议·编辑器·音视频·视频编解码·视频
爱就是恒久忍耐12 天前
VSCode里如何比较2个branch
ide·vscode·编辑器
意法半导体STM3212 天前
【官方原创】如何为STM32CubeMX2配置Visual Studio Code配置方案
vscode·stm32·单片机·嵌入式硬件·策略模式·stm32cubemx·嵌入式开发
bloglin9999912 天前
vscode中可视化的合并分支,在“合并编辑器中解析”中“与基线进行比较”是什么意思
ide·vscode·编辑器
终将老去的穷苦程序员12 天前
IntelliJ IDEA 的安装教程
java·ide·intellij-idea