在 Windows 8.1 上为 CMD 设置系统路径:尝试覆盖 Windows/System32/find.exe
Posted
技术标签:
【中文标题】在 Windows 8.1 上为 CMD 设置系统路径:尝试覆盖 Windows/System32/find.exe【英文标题】:Set system path for CMD on Windows 8.1: Trying to override Windows/System32/find.exe 【发布时间】:2014-08-12 03:02:17 【问题描述】:我正在尝试覆盖 Windows find
命令,以便可以调用 find
的另一个实现。另一个实现由 MSYS 提供,位于 C:\MinGW\msys\1.0\bin。在 Windows 7 上,我可以打开一个 CMD,然后运行:
SET PATH=C:\MinGW\msys\1.0\bin;%PATH%
由于在 C:\Windows\System32\ 路径之前添加了 MSYS 路径的前缀,因此在 Windows 7 上的 CMD 中调用 find
时,将执行 MSYS 版本。
该命令不适用于 Windows 8.1。当我在 Windows 8.1 上的 CMD 中调用 find
时,无论我做什么,它都默认为 Windows 实现。有没有办法在 Windows 8.1 上覆盖它?
我正在寻找一种只改变当前CMD实例的路径信息的解决方案。出于我的目的,我宁愿不必使用 powershell(即使路径设置在 powershell 中按预期工作)。
谢谢!
【问题讨论】:
在 Windows 8.1 框中输入where find
时会显示什么?输入c:\mingw\msys\1.0\bin\find
会怎样?
设置路径后,find返回:"C:\Windows\System32\find.exe C:\MinGW\msys\1.0\bin\find.exe" 所以它找到了两个,但是windows 优先。使用 MSYS 查找的绝对路径执行 MSYS 版本。我只是没有使用我正在使用的代码指定绝对路径的选项。 (我使用的构建系统假定 find 执行 MSYS 样式的查找。)
嗯……很奇怪。如果您在更改路径后键入PATH
,它会显示旧值还是新值?
想一想,检查注册表“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths”,看看是否有 find.exe 的条目
另外,在 cmd 提示符下尝试 doskey /macros 以防万一。
【参考方案1】:
当您运行 cmd.exe 时,请确保您没有从 C:\Windows\System32 目录运行该命令(它会自动为我打开)。当您位于具有匹配命令(在本例中为 MS 的 find.exe)的目录中时,本地副本将优先于您的 PATH 变量,即使您的 MSYS find.exe 在路径中首先列出。
所以,为了让它为我工作,我运行 cmd.exe,然后
C:\WINDOWS\system32>SET PATH=C:\msys64\usr\bin;C:\Program Files (x86)\CodeBlocks\MinGW\bin;%PATH%
如果我运行 where find
我会得到
C:\WINDOWS\system32>where find
C:\Windows\System32\find.exe
C:\msys64\usr\bin\find.exe
C:\Program Files (x86)\Git\bin\find.exe
如果我更改目录并运行where find
,我会得到:
C:\WINDOWS\system32>cd C:\
C:\>where find
C:\msys64\usr\bin\find.exe
C:\Windows\System32\find.exe
C:\Program Files (x86)\Git\bin\find.exe
我的路径略有不同,因为我正在尝试使用 MSYS2,但同样适用于旧版本的 MSYS。
祝你好运@mikewesthad!
【讨论】:
现在好了。这很容易解决。在这里,我责怪 Windows 8 ......而不是阅读我的默认 cmd 路径。谢谢!以上是关于在 Windows 8.1 上为 CMD 设置系统路径:尝试覆盖 Windows/System32/find.exe的主要内容,如果未能解决你的问题,请参考以下文章
命名控件存在于 Windows 10 但不存在于 Windows 8.1
需要帮助让bash / batch在Windows 10上为R工作
如何将 Windows Server 2012 r2 打造成 Windows 8.1