系统学习 Windows 学习路径:从 CMD 到 PowerShell、系统网络,再到 WSL 与 Server

where

在 PATH 和当前目录中定位可执行文件或匹配文件。

补充说明

where 按名称模式查找文件,默认搜索当前目录和 PATH 中的目录;没有写扩展名时,会按 PATHEXT 追加 .exe、.bat、.cmd 等扩展名(官方说明)。它适合确认 python、git、node 实际来自哪个路径,或递归查找某个目录下的文件。/r 指定递归起点,/q 只返回退出码,/f 给结果加引号,/t 显示大小和时间。

边界:where 找到的是文件,不保证它可执行或能正常运行;Windows 没有 Linux 的可执行位,ACL、架构和依赖都可能让程序启动失败。它按 PATH 顺序列出所有匹配,实际执行时命令解释器通常用第一个。where 不是包管理器,也不能告诉你某个命令是 CMD 内部命令还是别名;查别名用 doskey /macros 或 PowerShell Get-Command。

Windows 10/11 与 Server 2016+ 的 where.exe 参数一致。PowerShell 中 where 是 Where-Object 的别名,直接写 where python 会被当成过滤脚本并报错;在 PowerShell 里要写 where.exe python,或用 Get-Command python。

常用示例

# 1. 查 python 在 PATH 中的全部来源
C:\> where python

# 2. 只看是否存在,不输出路径,便于脚本判断
C:\> where /Q git && echo found || echo missing

# 3. 在用户目录下递归查找 node.exe
C:\> where /R C:\Users\me\AppData\Local node.exe

# 4. 显示文件大小和修改时间,判断版本是否过期
C:\> where /T /F notepad.exe

# 5. 在 PATH 中查找所有 exe,再筛选名字
C:\> where $PATH:*.exe | findstr /I "python"

# 6. 在指定目录树中查找 Java,避免全盘扫描
C:\> where /R "C:\Program Files" java.exe

# 7. 确认 CMD 自身的位置
C:\> where cmd.exe

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 在 PowerShell 里 where python 为什么可能报错?应该怎么写?
  2. where foo 和 where foo.exe 的结果为什么可能不同?
  3. where 找到程序就代表它能正常运行吗?
答案
  1. where 是 Where-Object 的别名;用 where.exe python 或 Get-Command python。
  2. 不写扩展名时 where 会按 PATHEXT 追加 .exe、.bat 等。
  3. 不代表,还要看 PATH 顺序、ACL、架构和依赖是否满足。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令