ryk*_*boy 6 cmd path batch-file
我试图通过将包含它的目录添加到PATH来全局运行.bat文件.这显然适用于exe文件,但有没有办法以这种方式运行.bat文件?
正如@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.bat从C:\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。