将批处理文件添加到 PATH

Add batch file to PATH

我试图通过将包含它的目录添加到 PATH 来全局 运行 一个 .bat 文件。这显然适用于 exe 文件,但有没有办法以这种方式 运行 .bat 文件?

正如@SLaks 在他的评论中所说,这会奏效。

根据您的其余评论,您需要指定完整的文件名。如果有 program.exeprogram.bat,您需要在命令提示符下输入 program.bat 而不仅仅是 program

当您在命令提示符下输入 program 时,shell 将首先尝试执行 program.com,然后是 program.exe,然后是 program.bat。确切的顺序保存在PATHEXT环境变量中:

C:\Windows>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC 

原来的 MS-DOS 没有这个变量,我记得。它搜索了 .COM、.EXE,然后是 .BAT,因此该行为自 MS-DOS 3.3(我相信自 IBM DOS 1.0)以来一直存在,但我相信它是 hard-coded。 PATHEXT 变量是在 Windows NT、IIRC 中引入的。


编辑添加:

啊,好的。听起来您的批处理文件也需要更改为它自己的目录,以便当前工作目录位于它所在的任何位置。最简单的方法是在批处理文件的开头(在 @echo off 之后)放置:

pushd %~dp0

这会将当前工作目录更改为批处理文件所在的目录。然后在最后一行:

popd

这会将当前工作目录更改为上次 pushd 为 运行 之前的当前工作目录。

pushd and popd这两个命令类似于高级更改目录命令。如果您在 C:\ 并键入 pushd C:\Program Files\,您将切换到该目录。然后,如果您键入 popd,您将返回到刚刚在 C: 的位置。您可以多次执行此操作,每次 "pushing" 另一个目录到目录历史记录的 "stack" 中。 popd 然后移除堆栈的顶部,并带回一个。把它想象成浏览器上的后退按钮。您甚至可以同时更换驱动器。 pushd D:\ 将切换到 D: 盘并将目录设置为 D: 的根目录。

现在,%~dp0 有点奇怪。这是一个修改后的变量

您可能知道批处理文件的参数会分配给特殊变量。 %1 是第一个参数,然后 %2 是第二个,%3 第三个,依此类推直到 %9%0 是第零个参数。那是实际批处理文件本身的名称。如果我们从C:\Folder\目录运行program.bat%0可能是program.bat.

标题 (~) 删除了参数周围的双引号。所以 %~0 是批处理文件的文件名,没有任何引号,如果您的文件或文件夹名称中有空格,就会出现。

d 表示 "drive letter only"。所以 %~d0 将是 C:(假设我们在 C: 驱动器上)。

p表示"path only"。所以 %~p0 将是 \Folder\.

我们都想要,所以 dp 意味着 "drive and path only"。所以 %~dp0 扩展为 C:\Folder\.

所以,批处理文件的第一行现在是:

pushd C:\Folder\

但它是动态的!因此,如果您将它移动到 D:\AnotherFolder\,它仍然可以工作而无需对其进行编辑。您可以在 for 命令下找到 cmd.exe 理解的变量修改的完整列表。

您还可以通过控制面板将 .bat 个文件添加到 PATH


按下 windows 键 ⊞ Win,然后开始输入 environment.

点击进入控制面板选项:

点击environment variables

向下滚动到 Path,然后单击 edit

然后点击new,进入批处理文件的文件夹


如果您的文件名为 abc.bat,并且它在您的 PATH 中,您可以 运行 从 CMD 使用:

abc