我不认为这个确切的问题之前已经问过(我看了)。
我的备份服务器使用Robocopy运行一个脚本,我想排除那些不需要备份的文件,具体来说:
*\AppData\Local\Google *\AppData\Local\Microsoft\Windows *\AppData\Local\NVIDIA *\AppData\Local\Temp *\AppData\LocalLow\Google
(所有这些都有一百万个微小的caching文件需要大量的时间进行分析,但不需要恢复;大部分的增量备份运行时间正在处理这些文件)
“\ AppData …”之前的path根据计算机名称,用户名(每台计算机上的多个用户)以及该计算机上的文件夹结构(并非每个人都拥有c :)上的所有数据)而有所不同。
为了简单起见,我有一个名为_exclude的环境variables,我在每次调用Robocoy时使用:
SET _exclude= /XD *AppData\Local\Google *AppData\Local\Temp [...etc]
我不想排除每个包含“AppData”或“Local”或“Google”的目录,因为这会排除有价值的数据。 只是那些特定的子path。
我已经试过,没有引导'\',有和没有双引号的path,有/没有'*',以及这些排列。
有没有办法使Robocopy的这个工作,没有硬编码每台机器上的每个用户的特定path?
Robocopy绝对不会做你想要的东西。
最初我想过告诉你写一个dynamic生成排除列表的脚本,但是你可能会遇到命令行长度的限制。
考虑到这一点,我认为你最好写一个脚本来创build一个Robocopy“作业”文件。 这是一个脚本,基于C:\Users的内容dynamic创build一个简单的作业:
@echo off set DEST=\\SERVER\SHARE set SRC=C:\Users set RCJ=%RANDOM%.RCJ echo /DD:%DEST%>%RCJ% echo /SD:%SRC%>>%RCJ% echo /IF>>%RCJ% echo *>>%RCJ% echo /S :: copy Subdirectories, but not empty ones.>>%RCJ% echo /E :: copy subdirectories, including Empty ones.>>%RCJ% echo /COPY:DAT :: what to COPY for files (default is /COPY:DAT).>>%RCJ% echo /PURGE :: delete dest files/dirs that no longer exist in source.>>%RCJ% echo /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).>>%RCJ% echo /R:1000000 :: number of Retries on failed copies: default 1 million.>>%RCJ% echo /W:30 :: Wait time between retries: default is 30 seconds.>>%RCJ% echo /XD :: eXclude Directories matching these names>>%RCJ% for /d %%i in (%SRC%\*) do call :_de "%%i">>%RCJ% robocopy /job:%RCJ% del %RCJ% goto :EOF :_de echo %~1\AppData\Local\Google echo %~1\AppData\Local\Microsoft\Windows echo %~1\AppData\Local\NVIDIA echo %~1\AppData\Local\Temp echo %~1\AppData\LocalLow\Google
我在这个脚本中非常傲慢,继续运行robocopy并删除作业文件。 在testing时,我会将这些行注释掉,并且可能会在完成robocopy之后添加一些错误errorlevel检查。