将批处理文件添加到 PATH
Add batch file to PATH
我试图通过将包含它的目录添加到 PATH 来全局 运行 一个 .bat 文件。这显然适用于 exe 文件,但有没有办法以这种方式 运行 .bat 文件?
正如@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)以来一直存在,但我相信它是 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
我试图通过将包含它的目录添加到 PATH 来全局 运行 一个 .bat 文件。这显然适用于 exe 文件,但有没有办法以这种方式 运行 .bat 文件?
正如@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)以来一直存在,但我相信它是 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