运行Robocopy批处理文件,将整个驱动器复制到另一个驱动器

15

我试图运行一个简单的备份(镜像),将一个整个驱动器(d:)备份到另一个驱动器(k:)。我创建了一个批处理文件('backup.bat'),定义了源(d:)和目标(k:),并将此批处理文件放置在d驱动器上的一个文件夹中(d:\temp)。当我双击批处理文件时,它将源定义为d:\temp,而不是我在批处理文件中定义的d:。

以下是.bat文件中的文本:

@echo off
echo To begin backing up data:
pause
robocopy "D:" "K:" /L /v                 
echo.
pause
exit

当我双击backup.bat时,会出现以下内容:

enter image description here

可以看到,源被定义为d:\temp。这是批处理文件所在的位置,但在批处理文件中,我将其定义为D:。由于某种原因,目标被正确定义。

有什么想法吗?

-al

编辑:如果我在源和目标位置添加'/',则会出现更奇怪的行为(请参见屏幕截图)。现在,源既是定义的源,又是目标的组合,没有目标。

@echo off

echo To begin backing up data:
pause

robocopy "D:\" "K:\" /L /v


echo.            
pause
exit

图片描述

而且,如果我从源和目标中删除引号......它可以正常工作!

@echo off

echo To begin backing up data:
pause

robocopy D:\ K:\ /L /v
echo.            
pause
exit

在此输入图像描述

4个回答

18

使用"D:"时,你并没有指定D驱动器的根目录(D:\),而是指定了D当前目录(D:\temp是你的示例)。

要解决这个问题,只需在源规范和目标规范中添加\即可。

robocopy d:\ k:\ /L /v                 

我已经尝试过了,但它产生了更奇怪的东西。请参见我上面的编辑。 - cherrytree
2
@ PA. 是正确的,我不仅需要添加 \,还需要删除引号。感谢您的帮助。 - cherrytree

3

使用/E选项。 还要检查其他必要/有用的参数,如/copyall /ZB/DCOPY:DAT,通过/?


1

/L选项是进行干扰运行,实际上没有复制任何内容。

来自微软网站: /l指定仅列出文件(而不是复制、删除或时间戳)。

这是在复制整个磁盘之前进行测试干扰运行的示例:

      Total    Copied   Skipped  Mismatch    FAILED    Extras                                                                                                                                                                                                             Dirs :     63346     63346         2         0         0         0                                                                                                                                                                                                            Files :    719564    719564         0         0         0         0                                                                                                                                                                                                            Bytes :   4.039 t   4.039 t         0         0         0         0                                                                                                                                                                                                            Times :   0:27:58   0:00:00                       0:00:00   0:27:57                                                                                                                                                                                                            Ended : Monday, September 6, 2021 9:25:35 AM  

这是我的记事本,用于生成命令(注意我只需删除 /L 即可执行复制):

测试(模拟运行): robocopy Q: G: /L /E /COPYALL /R:20 /W:15 /MT /NP /A-:SH /Z /V /TEE /LOG+:VMRobCp.log

实际运行: robocopy Q: G: /E /COPYALL /R:20 /W:15 /MT /NP /A-:SH /Z /V /TEE /LOG+:VMRobCp.log


0

我发现当你在引号中为源路径和/或目标路径添加路径时,需要在最后一个斜杠后面加上空格。如果你有嵌入的空格,你需要用引号括起来,因此你需要在路径中的最后一个斜杠后面加上空格,例如“c:\”而不是“c:\”。

我无法告诉你robocopy发生了什么,但我的所有备份脚本都考虑到了这一点。

祝你好运!


顺便提一下,我想起来为什么在引号内的结束斜杠后要加一个空格。看起来如果你省略了这个空格,robocopy就无法识别路径以斜杠结尾,因此会认为你输入了文件名。 - thenobes
为什么不直接使用 /MIR 呢? - Patrick Burwell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接