Robocopy:如何移动目录的内容但保留目录


23

简单的任务:

将目录的所有内容c:\Users\files\Desktop\test 2移至c:\Users\files\Desktop\test 1

C:\admin\temp>robocopy "c:\Users\files\Desktop\test 2" "c:\Users\files\Desktop\test" *.* /S /MOVE

听起来很合理,但是现在目录也c:\Users\files\Desktop\test 2被删除了。是否有一个开关可以仅移动内容而不删除目录本身?


为什么Robocopy必须与其他有所不同?
John Gardeniers


1
关于robocopy test1 test2 ... && mkdir test2
jftuga 2011年

我最终更改了主目录的权限,因此运行robocopy的用户无法删除该目录本身,
Matthew Lock

Answers:


14

我一直在尝试通过网络共享来做同样的事情。

SET MoveDirSource=\\Server\Folder
SET MoveDirDestination=Z:\Folder

这是我在Windows 7机器上进行测试所得到的发现和解决方案。

建议:

ROBOCOPY "%MoveDirSource%" "%MoveDirDestination%" /MOVE /E

问题:移动源文件夹。

建议:

ROBOCOPY "%MoveDirSource%" "%MoveDirDestination%" /MOVE /E /XD "%MoveDirSource%"

问题:仍然移动源文件夹。

建议:

ROBOCOPY "%MoveDirSource%" "%MoveDirDestination%" /MOV /E

问题:在源文件夹中保留空文件夹结构。

工作解决方案:

MKDIR "%MoveDirDestination%"
FOR    %%i IN ("%MoveDirSource%\*") DO           MOVE /Y "%%i" "%MoveDirDestination%\%%~nxi"
FOR /D %%i IN ("%MoveDirSource%\*") DO ROBOCOPY /MOVE /E "%%i" "%MoveDirDestination%\%%~nxi"

前两行移动顶级文件,第三行移动文件夹。请注意,双%%用于批处理文件,粘贴到命令行需要将这些更改为单个百分比标记。

目的地中的〜nxi是一个FOR替代变量(请参阅FOR /?),其中〜nxi表示当前正在循环通过的项的名称和扩展名。

Robocopy的默认设置为重试一次,每次尝试之间等待30秒,因此您可能希望在robocopy参数中添加/ R:1 / W:1


8

您是否尝试过/ MOV选项?

           /MOV :: MOVe files (delete from source after copying).

F:> robocopy /?


ROBOCOPY :: Windows的强大文件复制

开始时间:2010年8月6日星期五11:51:26

          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 "*.*").

::
:: Copy options :
::
             /S :: copy Subdirectories, but not empty ones.
             /E :: copy subdirectories, including Empty ones.
         /LEV:n :: only copy the top n LEVels of the source directory tree.

             /Z :: copy files in restartable mode.
             /B :: copy files in Backup mode.
            /ZB :: use restartable mode; if access denied use Backup mode.
        /EFSRAW :: copy all encrypted files in EFS RAW mode.

/COPY:copyflag[s] :: what to COPY for files (default is /COPY:DAT).
                   (copyflags : D=Data, A=Attributes, T=Timestamps).
                   (S=Security=NTFS ACLs, O=Owner info, U=aUditing info).

       /DCOPY:T :: COPY Directory Timestamps.

           /SEC :: copy files with SECurity (equivalent to /COPY:DATS).
       /COPYALL :: COPY ALL file info (equivalent to /COPY:DATSOU).
        /NOCOPY :: COPY NO file info (useful with /PURGE).

        /SECFIX :: FIX file SECurity on all files, even skipped files.
        /TIMFIX :: FIX file TIMes on all files, even skipped files.

         /PURGE :: delete dest files/dirs that no longer exist in source.
           /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).

           /MOV :: MOVe files (delete from source after copying).
          /MOVE :: MOVE files AND dirs (delete from source after copying).

 /A+:[RASHCNET] :: add the given Attributes to copied files.
 /A-:[RASHCNET] :: remove the given Attributes from copied files.

        /CREATE :: CREATE directory tree and zero-length files only.
           /FAT :: create destination files using 8.3 FAT file names only.
           /256 :: turn off very long path (> 256 characters) support.

         /MON:n :: MONitor source; run again when more than n changes seen.
         /MOT:m :: MOnitor source; run again in m minutes Time, if changed.

  /RH:hhmm-hhmm :: Run Hours - times when new copies may be started.
            /PF :: check run hours on a Per File (not per pass) basis.

         /IPG:n :: Inter-Packet Gap (ms), to free bandwidth on slow lines.

            /SL :: copy symbolic links versus the target.

        /MT[:n] :: Do multi-threaded copies with n threads (default 8).
                   n must be at least 1 and not greater than 128.
                   This option is incompatible with the /IPG and /EFSRAW options.
                   Redirect output using /LOG option for better performance.

::
:: File Selection Options :
::
             /A :: copy only files with the Archive attribute set.
             /M :: copy only files with the Archive attribute and reset it.
/IA:[RASHCNETO] :: Include only files with any of the given Attributes set.
/XA:[RASHCNETO] :: eXclude files with any of the given Attributes set.

/XF file [file]... :: eXclude Files matching given names/paths/wildcards.
/XD dirs [dirs]... :: eXclude Directories matching given names/paths.

            /XC :: eXclude Changed files.
            /XN :: eXclude Newer files.
            /XO :: eXclude Older files.
            /XX :: eXclude eXtra files and directories.
            /XL :: eXclude Lonely files and directories.
            /IS :: Include Same files.
            /IT :: Include Tweaked files.

         /MAX:n :: MAXimum file size - exclude files bigger than n bytes.
         /MIN:n :: MINimum file size - exclude files smaller than n bytes.

      /MAXAGE:n :: MAXimum file AGE - exclude files older than n days/date.
      /MINAGE:n :: MINimum file AGE - exclude files newer than n days/date.
      /MAXLAD:n :: MAXimum Last Access Date - exclude files unused since n.
      /MINLAD:n :: MINimum Last Access Date - exclude files used since n.
                   (If n < 1900 then n = n days, else n = YYYYMMDD date).

            /XJ :: eXclude Junction points. (normally included by default).

           /FFT :: assume FAT File Times (2-second granularity).
           /DST :: compensate for one-hour DST time differences.

           /XJD :: eXclude Junction points for Directories.
           /XJF :: eXclude Junction points for Files.

::
:: Retry Options :
::
           /R:n :: number of Retries on failed copies: default 1 million.
           /W:n :: Wait time between retries: default is 30 seconds.

           /REG :: Save /R:n and /W:n in the Registry as default settings.

           /TBD :: wait for sharenames To Be Defined (retry error 67).

::
:: Logging Options :
::
             /L :: List only - don't copy, timestamp or delete any files.
             /X :: report all eXtra files, not just those selected.
             /V :: produce Verbose output, showing skipped files.
            /TS :: include source file Time Stamps in the output.
            /FP :: include Full Pathname of files in the output.
         /BYTES :: Print sizes as bytes.

            /NS :: No Size - don't log file sizes.
            /NC :: No Class - don't log file classes.
           /NFL :: No File List - don't log file names.
           /NDL :: No Directory List - don't log directory names.

            /NP :: No Progress - don't display percentage copied.
           /ETA :: show Estimated Time of Arrival of copied files.

      /LOG:file :: output status to LOG file (overwrite existing log).
     /LOG+:file :: output status to LOG file (append to existing log).

   /UNILOG:file :: output status to LOG file as UNICODE (overwrite existing log).
  /UNILOG+:file :: output status to LOG file as UNICODE (append to existing log).

           /TEE :: output to console window, as well as the log file.

           /NJH :: No Job Header.
           /NJS :: No Job Summary.

       /UNICODE :: output status as UNICODE.

::
:: Job Options :
::
   /JOB:jobname :: take parameters from the named JOB file.
  /SAVE:jobname :: SAVE parameters to the named job file
          /QUIT :: QUIT after processing command line (to view parameters).
          /NOSD :: NO Source Directory is specified.
          /NODD :: NO Destination Directory is specified.
            /IF :: Include the following Files.

2
是的,但这仅移动文件并保持目录不变,我想移动文件和目录,但将父目录本身保留在原位
perler 2010年

1
-1个答案未解决所问的问题
克里斯·马里西奇

1
@克里斯。有点刺耳的方法。除了“父目录”要求之外,答案是有效的,我确实要求澄清,只有在发布答案后才可用。使用我的答案,您可以使用/ XD或/ XA参数。
Guy

2
这实际上是对这个问题的完美答案。将robocopy与“ / mov”开关(而不是“ / move”开关)一起使用,并定位父目录。瞧!
John Homer 2012年

1
这不是完美的答案。mov开关不会移动子目录。/ mov / e将移动文件,但复制子目录。如果您只想保留父目录,则必须手动删除空的子目录,或使用其他
可行的

6

为此,您可以在不想删除的目录中创建一个占位符文件,然后指示robocopy使用/ XF排除该文件

由于文件已被排除,因此不会移动,也不会删除目录。

有关详细信息,请参见其他站点:http : //www.experts-exchange.com/OS/Microsoft_Operating_Systems/Windows/XP/Q_24306678.html(并向下滚动到底部,等等,等等)。


1
似乎并非如此,我在要复制的目录中拥有bat文件本身,该bat文件已被排除,并且robocopy仍尝试删除该文件夹(并且由于bat文件正在运行而失败)。
克里斯·马里西奇

@ Chris-Marisic:尝试从其所在目录外部运行批处理文件。如果cd到包含批处理文件的目录并从那里运行,即使使用/ XF排除批处理文件,也会得到“该进程无法访问该文件,因为该文件正在被另一个进程使用”。
RedGreenCode 2011年

4

我遇到了同样的问题,MKDIR在运行robocopy

您要移动给定文件夹的所有内容,以便仅保留父文件夹。那么为什么不只是再次创建父文件夹呢?

当然,您可能会遇到一些用户权限问题,但是也可以解决。


2

创建一个唯一的占位符文件,该文件将从robocopy命令中排除。

一种班轮如下:

echo.>>"C:\Source\.touch" && (robocopy "C:\Source" "C:\Dest" /XF ".touch" /MOVE /E & del "C:\Source\.touch")


1

“我的”解决方案是将文件和文件夹移动到源文件夹中的临时文件夹中。(不要将临时文件夹复制到它自己!),然后将其移动到taget文件夹。

set Source=I:\_Test\ToArchive
set target=I:\_Test\Archive
set tempFolderName=@_Copy_in_progress_Do_not_use_@
set LogFile=robocopy-result.log

robocopy.exe %source% %source%\%tempFolderName% /E /MOVE /NS /NP /v /W:0 /R:0 /LOG:%LogFile% /XD %source%\%tempFolderName%
sleep 5
robocopy.exe %source%\%tempFolderName% %target% /E /MOVE /NS /NP /v /W:0 /R:0 /LOG+:%LogFile%

我只是检测到“移动”到临时文件夹需要太多时间。这里更新:

set Source=I:\_Test\ToArchive
set target=I:\_Test\Archive
set tempFolderName=@_Copy_in_progress_Do_not_use_@
set LogFile=robocopy-result.log

mkdir %source%\%tempFolderName%\
for /f "delims==" %%I IN ('dir "%source%" /B') do if NOT %%I==%tempFolderName% (move "%source%\%%I" "%source%\%tempFolderName%")
sleep 3
robocopy.exe %source%\%tempFolderName% %target% /E /MOVE /NS /NP /v /W:0 /R:0 /LOG:%LogFile%

1

我很幸运找到答案。我想将文件夹移到磁盘的顶层。我试过了:

Robocopy "<PathToFolderToMove>" "H:\" /MOVE /E

使用以下目标地址时出错H:\" \MOVE \E\

我猜想“ \”转义了以下双引号,然后将命令更改为:

Robocopy "<PathToFolderToMove>" "H:\." /MOVE /E

最终将“”的内容复制到驱动器的根目录中。

因此,问题的答案是:

Robocopy "c:\Users\files\Desktop\test 2" "c:\Users\files\Desktop\test\." /MOVE /E

问候,
乔治


1

我刚刚使用/mov/e开关进行了测试,并且效果很好。

从命令行选项注意到,/mov和之间有区别/move。测试文件移至目标,而源上的目录结构保持不变。


-1

为什么不同?没什么两样 无论是否使用Robocopy,移动操作都是复制\删除操作。您要告诉它移动文件夹。移动意味着您将移动到新位置并腾出以前的位置。


但这不是我想要的。我想移动文件夹的内容,保留文件夹。这里的工作原理,Unix风格:(编辑,注释中没有代码,如屏幕截图) screencast.com/t/YTkwODIzZT
perler 2010年

-1为用户提出正当问题的答案
Chris Marisic 2011年

@克里斯:我不明白。我该如何指责用户?他问了一个问题,我回答了。我的回答中没有任何暗示。
joeqwerty 2011年

Why is it different? It's not different.OP发布了一个屏幕快照,显示了可以通过* nix完成的预期行为,但是robocopy似乎在任何方面都不允许。
克里斯·马里西奇

来吧,真的吗?争论这个吗?我已经清理了问题,以删除“令人反感”(并已加载)的句子。
马克·亨德森

-1

只需添加\ *

C:\admin\temp>robocopy "c:\Users\files\Desktop\test 2\*" "c:\Users\files\Desktop\test"  /S /MOVE

2
一个好的答案是这里提供了更多的解释。
kasperd 2015年

它工作得很好,并且完全符合op的要求。这也是很不言自明的。(反斜杠虽然以某种方式消失了)
塔加斯2015年

1
@Tagas:即使工作正常,您也应该添加解释。
Sven
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.