将批处理文件添加到PATH

ryk*_*boy 6 cmd path batch-file

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

Bac*_*its 4

正如@SLaks 在他的评论中所说,这会起作用。

根据您的其余评论,您需要指定完整的文件名。如果有program.exeand program.bat,则需要输入program.batand ,而不仅仅是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 
Run Code Online (Sandbox Code Playgroud)

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


编辑添加:

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

pushd %~dp0
Run Code Online (Sandbox Code Playgroud)

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

popd
Run Code Online (Sandbox Code Playgroud)

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

pushd和两个命令popd类似于高级更改目录命令。如果您在C:\处键入pushd C:\Program Files\,您将更改到该目录。然后,如果您输入popd,您将返回到 C: 位置。您可以多次执行此操作,每次将另一个目录“推送”到目录历史记录的“堆栈”上。 popd然后删除堆栈的顶部,并返回一个。可以将其想象为浏览器上的后退按钮。您甚至可以同时更改驱动器。 pushd D:\将更改为 D: 驱动器并将目录设置为 D: 的根目录。

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

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

标题 ( ~) 删除参数周围的双引号。批处理文件的文件名也是%~0不带任何引号的,如果文件或文件夹名称中包含空格,则可能会出现引号。

意思d是“仅驱动器号”。%~d0也是如此(C:假设我们位于 C: 驱动器上)。

意思p是“仅路径”。%~p0也会如此\Folder\

我们两者都想要,所以dp意味着“仅驱动器和路径”。所以%~dp0展开为C:\Folder\.

因此,批处理文件的第一行现在是:

pushd C:\Folder\
Run Code Online (Sandbox Code Playgroud)

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