将批处理文件添加到PATH

时间:2015-02-18 02:09:00

标签: batch-file path cmd

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

1 个答案:

答案 0 :(得分:3)

正如@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以来),但我认为它是硬编码的。 {NT}引入了PATHEXT变量。


编辑添加:

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

pushd %~dp0

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

popd

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

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

的根目录

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

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

tidle(~)删除参数周围的双引号。因此%~0是批处理文件的文件名,没有任何引号,如果文件或文件夹名称中有空格,则可以显示。

d表示“仅限驱动器号”。所以%~d0将是C:(假设我们在C:驱动器上)。

p表示“仅限路径”。因此%~p0将是\Folder\

我们想要两者,所以dp表示“仅限驱动器和路径”。因此%~dp0扩展为C:\Folder\

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

pushd C:\Folder\

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