我想制作一个批处理文件来打开多个程序,例如像这样的安装驱动程序
cd\
D: (the usb drive letter )
start sound driver.exe
start tochpad driver.exe
只需从计算机硬盘而不是 USB 闪存盘打开批处理文件即可。
问题是 USB 在每台计算机上都会更改其驱动器号。大家能帮忙吗?
答案1
将某种标识文件放在驱动器上并迭代驱动器。如果您找到该文件,则说明您找到了 U 盘。如果该文件不存在,此操作将停止工作。
据此,简单的方法如下,假设文件名为“USB.txt”:
@echo off
for %%d in (D: E: F: G: H: I: etc...) do (
if exist %%d\USB.txt (
echo USB at drive %%d connected
%%d
start sound driver.exe
start tochpad driver.exe
)
)
如需更好的解决方案,请查看问题我链接了。上面的内容已经存在一些缺陷,因为有人可能会使用 A: 和 B: 作为普通驱动器号,或者 USB.txt 可能不存在。
如果你看一下该问题的“更正”解决方案,它将是:
@echo off
for /F "tokens=1*" %%a in ('fsutil fsinfo drives') do (
for %%c in (%%b) do (
for /F "tokens=3" %%d in ('fsutil fsinfo drivetype %%c') do (
if %%d equ Removable (
echo Drive %%c is Removable (USB^)
%%c
start sound driver.exe
start tochpad driver.exe
)
)
)
)
据我所知,fsutil
需要以管理员权限执行,因此您必须根据所执行的操作注意这一点。
答案2
我相信,当从资源管理器单击(运行)批处理文件时,当前目录将设置为批处理文件的位置。
因此,如果您的批处理文件存储在 USB 驱动器上的目录中并从中运行,那么您已经位于具有该驱动器号的目录中。您不需要切换驱动器,因此您不需要指定它。
因此,只需使用CD \
它即可确保您处于所在驱动器的根级别。
您也不需要使用驱动器号来访问同一驱动器上的其他目录。如果您在文件夹中c:\temp
:
123\file.txt
相当于c:\temp\123\file.txt
(没有前导斜杠,因此路径被添加到当前路径)
\123\file.txt
相当于c:\123\file.txt
(前导斜杠,因此路径仅添加到驱动器号(称为“根”)
如果您从批处理文件内部启动其他批处理文件并且还需要知道它们位于哪个目录中,那么这可能会变得有点复杂。根据您的示例,我认为您不会遇到这种情况。
也可以看看 (https://stackoverflow.com/questions/16255184/) 了解有关如何找到当前工作目录的更深入的讨论。