Batch file 驱动器盘符更改时从USB驱动器运行批处理文件

Batch file 驱动器盘符更改时从USB驱动器运行批处理文件,batch-file,Batch File,因此,我制作了一个批处理脚本,它执行多个可移植程序(例如prog1.exe、prog2.exe等)。问题是,每当我将USB驱动器连接到另一台计算机时,驱动器号都会发生变化,从而使我在运行.bat文件时出错。请帮我找到解决办法。谢谢。您可以使用命令行参数%1,%2作为输入路径,并相应地修改bat文件。%d0提供当前驱动器号(包括冒号)。如果批处理文件包含在USB驱动器上,则可以使用该文件 所以,比如说 E:\PortablePrograms\ProgramName.exe 你会写信吗 %~d0\

因此,我制作了一个批处理脚本,它执行多个可移植程序(例如prog1.exe、prog2.exe等)。问题是,每当我将USB驱动器连接到另一台计算机时,驱动器号都会发生变化,从而使我在运行.bat文件时出错。请帮我找到解决办法。谢谢。

您可以使用命令行参数
%1
%2
作为输入路径,并相应地修改bat文件。

%d0
提供当前驱动器号(包括冒号)。如果批处理文件包含在USB驱动器上,则可以使用该文件

所以,比如说

E:\PortablePrograms\ProgramName.exe
你会写信吗

%~d0\PortablePrograms\ProgramName.exe
。。。或者你可以这样做

::change directory to the script's directory's drive
pushd %~d0
::navigate from the drive to the relevant path(s)
cd PortablePrograms
::execute any programs
ProgramName.exe
SecondProgramName.exe
::just because I like to pair my pushes with pops; not required
popd

这就是我如何获得列表中最后一个可移动驱动器的方法

    @echo off

    :: Drivetypes
    ::  0=Unknown
    ::  1=No Root Directory
    ::  2=Removable(USB,Firewire)
    ::  3=Local Disk (Internal Hard Drive)
    ::  4=Network Drive(\\Server\share\)
    ::  5=Compact Disk (CD DVD)
    ::  6=Ram Disk
    for /f "tokens=2 delims==" %%d in ('wmic logicaldisk where "drivetype=2" 
    get name /format:value') do set driveletter= %%d
    echo %driveletter%
    pause

批处理文件是否托管在USB上,或者批处理文件是本地的,并且USB保存着您试图访问的另一个资源?如果批处理文件托管在USB上(正如JohnLBevan所问),请忘记这个问题(使用%%d0)。否则:修复计算机上的驱动器号是一种选择吗?很高兴看到新的东西。谢谢。不用担心——还要感谢@AndriyM提供了答案的扩展部分。任何对
%~d0
感兴趣的人也可能对以下类似变量感兴趣: