在批处理中,如何指定使用卷名而不是驱动器号的路径?

在批处理中,如何指定使用卷名而不是驱动器号的路径?

在批处理中,有没有办法使用卷名而不是驱动器号来指定路径?(例如:类似于 \\RECOVERY\Docs\...)

或者,如果不可能的话,有没有办法检查特定的卷名是否属于特定的驱动器号(例如:如果 F:\ 是 RECOVERY 则执行此操作,否则执行那项操作)

我想要做的是:创建一个批处理,将一个驱动器备份到另一个驱动器,但由于两个驱动器(源驱动器和目标驱动器)都在可移动 USB 驱动器上,因此我无法确定驱动器号永远不会改变。将备份复制到工作文件夹而不是相反的文件夹将导致灾难性的失败。

答案1

我个人会使用 WMI(如果必须使用 cmd,则使用 wmic)并从那里获取标签 -> 驱动器号链接。这并不难,但我有点同意有人说批处理文件可能不是最好的解决方案……对于如此脆弱的备份操作。话虽如此,这里有快速到达那里的逻辑:

@echo off
set VAR=Source
for /f "skip=1" %%L in ('wmic logicaldisk where volumename^="SourceLabel" Get Caption') do @call :SetVar %%L
set VAR=Destination
for /f "skip=1" %%L in ('wmic logicaldisk where volumename^="DestinationLabel" Get Caption') do @call :SetVar %%L

echo Copying data from %Source% to %Destination%
goto :EOF

:SetVar
set Label=%1
if NOT [%Label%]==[] set %VAR%=%Label%
goto :EOF

您需要做的就是用源驱动器的真实标签替换 SourceLabel,目标标签也一样。一旦您在 echo 命令中获得正确的引用 - 您可以在它和“goto :EOF”指令之间放置任何其他逻辑。

相关内容