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
作为替代方案,可能是因为 wmic can be a little slow, you could try this from your batch-file:
@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
、(在上面第五行)更改为您设置为唯一设备标签。
如果您想使用 wmic,因为所有 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
不确定完成此任务的最佳方法并寻找正确方向的点。
目前使用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
作为替代方案,可能是因为 wmic can be a little slow, you could try this from your batch-file:
@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
、(在上面第五行)更改为您设置为唯一设备标签。
如果您想使用 wmic,因为所有 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