【问题标题】:In Windows cmd, how do I run an executable in the current directory (instead of one with the same name in %PATH%) without referring to the full path? [closed]在 Windows cmd 中,如何在当前目录中运行可执行文件(而不是在 %PATH% 中具有相同名称的可执行文件)而不参考完整路径? [关闭]
【发布时间】:2014-06-20 18:15:57
【问题描述】:

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

./foobar

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

【问题讨论】:

  • 从您的评论到保罗的回答,您应该将问题更改为“如何运行与内部命令同名的外部程序
  • 在 Windows 中,路径有反斜杠而不是正斜杠。所以正确的语法是.\date,这确实会运行可执行文件(如果存在)并且永远不会运行内部命令。
  • @HarryJohnston - 我不敢相信我错过了。我已经习惯了正斜杠,以至于.\date 对我来说甚至看起来都不像正确的语法。谢谢。

标签: windows windows-7 cmd path-variables


【解决方案1】:

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

copy con run_foobar.bat
cd c:\myfoobardirectory
foobar
"<CTRL> + Z" 

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

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

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

【讨论】:

  • 你确定吗?我已将cd 编入C:\Program Files (x86)\GnuWin32\bin,其中包含date.exe(UNIX 的Windows 端口date),但发出datedate.exe 最终都会执行Windows 的date
  • @Andrew 和 paul,你们都是对的,你们只是在谈论两件不同的事情。 Andrew 给出的date 示例不是应用程序,它是内置于Windows 命令行处理器的内部命令。所以是的,无论如何它都会被执行。但 Windows 确实 在查看路径的其余部分之前搜索当前目录,因此如果当前目录存在,notepad.exe 将从当前目录执行,而不是与操作系统捆绑在一起的 notepad.exe 和位于路径中。
  • @AndrewCheong date 是一种特殊情况,因为它也是cmd.exeinternal 命令,并且这些确实覆盖了磁盘上的文件。运行 GNU 工具的唯一方法是显式使用 date.exe 而不是 date。您应该提到您正在尝试在问题中运行 date 而不是 foobar,因为这会产生影响
  • @a_horse_with_no_name,这就是我的想法,但即使我运行 date.exewith .exe),Windows 命令也会运行,这就是导致我的原因相信它一定是一个应用程序......
  • @AndrewCheong:当我运行 date.exe 而我的 current 目录是 date.exe 所在的目录时,则使用该目录而不是内部命令
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多