我正在尝试通过将包含它的目录添加到PATH来全局运行.bat文件。这显然适用于exe文件,但有没有办法以这种方式运行.bat文件?
答案 0 :(得分:3)
正如@SLaks在评论中所说,这将有效。
根据您的其他评论,您需要指定完整的文件名。如果有program.exe
和program.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
之前的状态。
两个命令pushd
和popd
类似于高级更改目录命令。如果您在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可以理解的变量修改的完整列表。