【发布时间】:2014-03-27 00:06:35
【问题描述】:
我一直在用 StackOverflow 之类的线程对此进行大量研究,但虽然我觉得我已经接近解决方案,但这个问题让我很头疼。
我正在尝试做的事情:当连接特定的外部硬盘驱动器(通过 WMIC 上的 VolumeSerialNumber 区分)时,会找到驱动器号,并通过 robocopy 完成镜像。该脚本通过双击执行。这是我目前所拥有的:
FOR /F "skip=1" %%i in ('wmic logicaldisk where VolumeSerialNumber^="XXXXXXXX" get deviceid 2^>nul') DO (
SET y=%%i
IF [%y%]==[] GOTO hdmissing
SET "backuphd=%%i"
GOTO endfor
)
:endfor
robocopy "C:\Users\Herbert\Documents" "%backuphd%\Backup\Documents" /MIR
ECHO Backup done
ECHO end
:hdmissing
ECHO Couldn't find external drive
:end
PAUSE
这样,外部 HD 永远不会被检测到(%y% 始终是一个空字符串)。但是,如果我在同一个控制台会话中执行两次脚本,一切都会按预期进行。但我希望它在第一次执行时起作用。
这是我迄今为止尝试过的:
- 将
SET y=dummy放在脚本的开头。始终找到 HD,触发备份到 C: 如果 HD 未实际连接(显然SET y=%%i不会更改y?) - 将
%y%更改为!y!- 始终可以再次找到 HD
【问题讨论】:
标签: batch-file for-loop token