信息:在执行 `where git` 时找不到给定模式的文件

Posted

技术标签:

【中文标题】信息:在执行 `where git` 时找不到给定模式的文件【英文标题】:INFO: Could not find files for the given pattern(s) doing `where git` 【发布时间】:2021-10-24 15:19:32 【问题描述】:

我在C:\Program Files\Git\ 下安装了 git 我从setupenv.bat 执行以下操作:

set PATH="C:\Program Files\Git\bin";%PATH%

所以执行以下操作我可以看到它:

echo %PATH%

以下将起作用:

git --version
>git version 2.21.0.windows.1

但这不会:

where git
>INFO: Could not find files for the given pattern(s)

【问题讨论】:

我认为这是因为您使用了不应该存在的双引号。 Path 位置以分号分隔,因此您不应双引号 git 位置。尝试将set PATH="C:\Program Files\Git\bin";%PATH% 更改为Set PATH=C:\Program Files\Git\bin;%PATH% 或更正确的Set "Path=%Path%C:\Program Files\Git\bin;"。反而。此外,不要使用惰性输入,并允许解析器搜索并将%PATHEXT% 下列出的每个扩展名附加到您的文件名,使用git.exe,它总是会运行得更快。 确实这是答案,我很高兴确认它解决了问题。你能把它作为一个正确的答案吗? 【参考方案1】:

问题很可能是您的位置字符串用双引号括起来。

%Path% 字符串值内容中列出的位置用分号分隔,因此不应将您打算添加到该值内容的内容用双引号括起来。

如果您查看现有的%Path% 内容,在命令提示符下键入Path,然后按ENTER 键,您会注意到没有双引号,并且很可能存在包含空格字符的路径。

因此,解决方案是将您的set 命令从:

set PATH="C:\Program Files\Git\bin";%PATH%

到:

set PATH=C:\Program Files\Git\bin;%PATH%

不过,我要补充一点,Set 命令的推荐语法是:

Set "VariableName=Variable Value"

所以你真的应该这样写:

Set "PATH=C:\Program Files\Git\bin;%PATH%"

还应该注意的是,Path 值内列出的位置是按顺序搜索的,这意味着您应该仔细考虑是否应该找到您的新位置,因此是首先搜索还是最后搜索。优先级可能很重要,具体取决于该脚本中正在执行的其他操作。由于 Path 值字符串应该已经以分号结尾,您可以轻松地在末尾找到它:

Set "Path=%Path%C:\Program Files\Git\bin;"

另外请注意,已经有一个可用于普通\Program Files\ 目录的环境变量,因此您可以另外合并它:

Set "Path=%ProgramFiles%\Git\bin;%Path%"

【讨论】:

这很有趣!通常引号should 没有害处(有时它们甚至可能是必需的,想想包含分号的路径),但当然这取决于处理%PATH% 变量的程序...... @aschipfl,是的,%path% 变量使用分号作为分隔符。它是双面的,因为带有双引号的路径变量将 100% 用于可执行文件,但像 where 这样的搜索功能不喜欢双引号。 @aschipfl 我并没有太惊讶,因为我记得之前在%~$Path: 循环中看到过类似的问题,%~$Path: 扩展。我会,如果我的记忆还可以预期,@For %%G In ("git.exe") Do @Echo %%~$Path:G 也会失败。我想任何愚蠢到使用分号的人都是他们的文件或目录名,应该会遇到问题。 是使用"SET "PATH=..."还是使用内部的PATH命令更好? 我不会说在这种情况下“更好”是可量化的@lit,但 IMO,不使用 Set 命令更有可能混淆代码的读者。话虽如此,虽然这里有点跑题了,但如果我可以使用PATHEXT ; 而不是Set "PATHEXT=",我会更开心

以上是关于信息:在执行 `where git` 时找不到给定模式的文件的主要内容,如果未能解决你的问题,请参考以下文章

git-upload-pack:克隆远程 Git 存储库时找不到命令

安装 XSP 时找不到包“mono”

GridView控件更新时找不到id

在eclipse中执行程序时找不到类[重复]

Google Play Developer API - 为啥在用户执行重新订阅时找不到linkedPurchaseToken?

在单独的步骤中执行时找不到 gsutil 命令 - bitbucket 管道