将xcopy切换为robocopy

时间:2016-06-01 22:38:03

标签: batch-file robocopy

我使用以下脚本。当我用“robocopy / mov / mt”换掉“移动”时它不起作用。目标进入一个级别太深,并将文件的名称作为目标文件夹。错误也在下面。

如何使用robocopy代替?我需要多线程。

错误= ERROR 123(0x0000007B)访问源目录D:\ source \ FILE.tif \ 文件名,目录名或卷标语法不正确。

@echo off

SETLOCAL ENABLEDELAYEDEXPANSION

SET Source=D:\source
SET Destination=D:\dest

Echo Gather Top 30 files
set SrcCount=0
set SrcMax=31
FOR /F "TOKENS=*" %%a IN ('dir /A-D /O-D /B "%Source%"\*.*') DO (
    SET /A SrcCount += 1
    if !SrcCount! LEQ %SrcMax% (
MOVE "%source%\%%a" "%destination%
  )
)

这就是我的尝试:

@echo off

SETLOCAL ENABLEDELAYEDEXPANSION

SET Source=D:\source
SET Destination=D:\dest

Echo Gather Top 30 files
set SrcCount=0
set SrcMax=31
FOR /F "TOKENS=*" %%a IN ('dir /A-D /O-D /B "%Source%"\*.*') DO (
    SET /A SrcCount += 1
    if !SrcCount! LEQ %SrcMax% (
robocopy /mov /mt "%source%\%%a" "%destination%
  )
)

1 个答案:

答案 0 :(得分:1)

查看robocopy的参数:

  

robocopy /?

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows
-------------------------------------------------------------------------------

  Started : Wed Jun 01 18:46:40 2016

              Usage :: ROBOCOPY source destination [file [file]...] [options]

             source :: Source Directory (drive:\path or \\server\share\path).
        destination :: Destination Dir  (drive:\path or \\server\share\path).
               file :: File(s) to copy  (names/wildcards: default is "*.*").

第一个参数是源目录,而不是文件。您正在传递文件名。

所以,请改为:

robocopy /mov /mt "%source%" "%destination%" "%%a"

对于/MT选项,我认为线程用于复制不同的文件,而不是相同的不同部分>文件。

由于你一次只用一个文件调用它,我不相信你真的会得到任何多线程复制。

您需要在一个字符串中收集所有30个文件名,因此替换后的结果将是robocopy的单次执行,如下所示:

robocopy /mov /mt "sourceDir" "destDir" "file1" "file2" "file3" ... "file30"