在Windows cmd中,如何在当前目录中运行可执行文件(而不是在%PATH%中具有相同名称的可执行文件)而不引用完整路径?

And*_*ong 7 windows cmd path-variables windows-7

我正在尝试foobar从目录运行可执行文件,但是Windows碰巧也有一个名为的可执行文件(或命令)foobar。在UNIX中,我只写

./foobar
Run Code Online (Sandbox Code Playgroud)

但是Windows cmd似乎不了解这一点。鉴于我不想将此目录添加到我的目录中%PATH%,是否有另一种方法可以运行当前目录foobar而无需显式键入路径?

小智 8

Windows 在搜索路径之前总是先在当前目录中查找。如果您尝试从程序运行命令,请先尝试“cd”到目录,如下所示:

copy con run_foobar.bat
cd c:\myfoobardirectory
foobar
"<CTRL> + Z" 
Run Code Online (Sandbox Code Playgroud)

一种特殊情况是,如果您尝试执行与 cmd.exe 的内部命令名称相匹配的文件,例如 'date',在这种情况下,即使您有当前目录中的本地“date.exe”可执行文件。

您可以通过在当前目录中键入全名“date.exe”来强制执行本地程序文件,这将覆盖内部“date”命令。

还要注意,在 PowerShell 中,行为与 Cmd shell 不同,因此即使您在本地目录中输入 PowerShell 类似 'java' 或 'java.exe' 的命令,那么即使有路径命令也会被执行具有相同名称的本地文件。要强制执行本地文件,我们将使用 linux 样式“./java”或“./java.exe”。

  • @Andrew 和 paul,你们都是对的,你们只是在谈论两件不同的事情。Andrew 给出的`date` 示例不是一个*应用程序*,而是一个内置于Windows 命令行处理器的内部命令。所以是的,它无论如何都会被执行。但是 Windows * 确实 * 在查找路径的其余部分之前搜索当前目录,因此如果当前目录存在,`notepad.exe` 将从当前目录中执行,而不是与操作系统捆绑并定位的 `notepad.exe`在路径中。 (3认同)
  • @AndrewCheong `date` 是一个特例,因为它也是 `cmd.exe` 的 **internal** 命令,这些命令确实会否决磁盘上的文件。运行 GNU 工具的唯一方法是明确使用 `date.exe` 而不是 `date`。你应该提到你试图在你的问题中运行`date`而不是`foobar`,因为这会有所不同 (2认同)