为什么“where”命令对于完整路径不能按预期工作?

-1 windows command-line windows-10

仔细阅读这些命令和输出:

where pg_ctl
C:\Program Files\PostgreSQL\12\bin\pg_ctl.exe

where pg_ctl.exe
C:\Program Files\PostgreSQL\12\bin\pg_ctl.exe

where "C:\Program Files\PostgreSQL\12\bin\pg_ctl.exe"
ERROR: Invalid pattern is specified in "path:pattern".
Run Code Online (Sandbox Code Playgroud)

为什么最后一个返回错误而不是输出自身/成功?

我必须能够可靠地输入“命令”该命令的可执行文件的完整路径,以确定它是否是可执行命令。

检查错误代码,我得到以下信息:

0
0
2
Run Code Online (Sandbox Code Playgroud)

where /?

NOTE: The tool returns an error level of 0 if the search is
    successful, of 1 if the search is unsuccessful and
    of 2 for failures or errors.
Run Code Online (Sandbox Code Playgroud)

换句话说,它不会为最后一个命令(完整路径)返回正确的 1(搜索不成功),而是返回 2(失败或错误)。但即使它确实返回 1 作为退出代码,那仍然是错误的。它应该返回0,因为路径存在,所以它是一个可执行命令。

LPC*_*hip 5

哪里有查找文件的命令。如果指定其完整路径,那么使用 where 有何意义?

您可以随时使用

if exist c:\path\filename.ext echo File does exist.
Run Code Online (Sandbox Code Playgroud)

但如果您确实想使用 where 命令,请按照其应有的方式使用它。使用 /r 参数指定路径,并将要搜索的命令作为单独的参数放置。

就像这样:

C:\>where /r "C:\Program Files\PostgreSQL\12\bin" pg_ctl.exe
C:\Program Files\PostgreSQL\12\bin\pg_ctl.exe

C:\>_
Run Code Online (Sandbox Code Playgroud)

  • 我第二***那么使用where有什么意义?*** ??? (6认同)