Bat 文件根据设备名称而不是驱动器号复制到设备

Bat file to copy to device based on device name not drive letter

不确定完成此任务的最佳方法并寻找正确方向的点。

目前使用Bat文件获取备份文件并将其复制到外部设备。 例如:

XCOPY C:\MainFolder\Backups\*.* G:\Backupfolder\ /D /S /E /Y

我试图鼓励用户备份到多台设​​备并将一台设备放在异地。 备份通常在夜间进行,并设置为计划任务。 大多数用户是计算机文盲。

众所周知,您可以插入多个 USB 设备,它会为其分配一个新的驱动器号。 有什么方法可以根据与驱动器号相对的名称复制到设备吗? 用户进入计算机管理并为其分配正确的驱动器号太复杂了。

我唯一能想到的就是使用 Bat 文件复制到一组驱动器盘符,但是有了这个我可以看到它备份到它不应该备份的东西。

假设您知道可移动磁盘的卷名:

@echo off
for /f %%i in ('wmic logicaldisk where "drivetype=2" get Name^, VolumeName ^| findstr /i "Name Of USB volume here"') do echo %%i

以上将echo卷名的盘符

下面将同时显示卷名和驱动器号的位置:

@echo off
for /f "tokens=1,*" %%i in ('wmic logicaldisk where "drivetype=2" get Name^, VolumeName ^| findstr /i "Name Of USB volume here"') do echo %%i %%j

您可以 运行 wmic 单独查看其他结果:

wmic logicaldisk get Name, VolumeName, Caption, DriveType

作为旁注。可移动驱动器类型为 2

作为替代方案,可能是因为 can be a little slow, you could try this from your :

@Echo Off
Set "Drv="
For /F "Tokens=*" %%A In (
    'MountVol^|Find ":\"'
)Do Vol %%~dA 2>NUL|Find /I "YourLabel">NUL&&Set "Drv=%%~dA"
If Not Defined Drv Exit /B
Echo Your Drive Letter is %Drv%
Timeout 3 >NUL

只需将YourLabel(在上面第五行)更改为您设置为唯一设备标签。


如果您想使用 ,因为所有 USB 设备都不会被视为驱动器类型 2,不依赖其 DriveType 值可能更安全。因此,我会建议这个替代方案:

@Echo Off
Set "Drv="
For /F Skip^=1 %%A In (
    'WMIC LogicalDisk Where "VolumeName='YourLabel'" Get DeviceID 2^>NUL'
)Do For /F Tokens^=* %%B In ("%%A")Do Set "Drv=%%B"
If Not Defined Drv Exit /B
Echo Your Drive Letter is %Drv%
Timeout 3 >NUL

再次根据需要更改 YourLabel


在这两种情况下,您显然会将倒数第二行更改为:

XCopy "C:\MainFolder\Backups" "%Drv%\Backupfolder\" /D /S /Y