Robocopy/xd с подстановочными знаками и подпутями

Я не думаю, что этот точный вопрос задали прежде (я смотрел).

Мой сервер резервного копирования выполняет использование сценария Robocopy, и я хочу исключить файлы, которые не должны действительно быть сохранены, конкретно:

*\AppData\Local\Google 
*\AppData\Local\Microsoft\Windows 
*\AppData\Local\NVIDIA 
*\AppData\Local\Temp 
*\AppData\LocalLow\Google

(все, у этого есть миллион крошечных файлов кэша, которые занимают много времени для парсинга, но не необходимы для восстановления; большая часть времени выполнения инкрементного резервного копирования обрабатывает их),

Путь до "\AppData..." варьируется, в зависимости от названия машины, имя пользователя (многочисленные пользователи на машину) и структура папок на той конкретной машине (не, у всех есть все их данные по c:).

Для хранения вещей простыми у меня есть переменная среды, названная _exclude, который я использую в каждом вызове для Robocoy:

SET _exclude= /XD *AppData\Local\Google *AppData\Local\Temp [...etc]

Я не хочу исключать каждый каталог, который содержит "AppData" или "Локальный" или "Google", поскольку это исключило бы ценные данные. Просто те конкретные подпути.

Я попробовал его и не ведя '\', и без двойных кавычек вокруг путей, с/без '*', и перестановки тех.

Там какой-либо путь состоит в том, чтобы сделать эту работу с Robocopy без жесткого кодирования конкретный путь для каждого пользователя на каждой машине?

3
задан 12 November 2014 в 20:52
3 ответа

Robocopy определенно не сделает то, что вы ищете, самостоятельно.

Изначально я думал о том, чтобы сказать вам написать сценарий, который динамически генерирует список исключений, но вы, вероятно, столкнетесь с ограничениями длины командной строки.

Имея это в виду, я думаю, вам лучше написать сценарий для создания файла «задания» Robocopy. Вот сценарий для динамического создания простого задания на основе содержимого C: \ Users :

@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 и удалив файл файл задания. Я бы прокомментировал эти строки во время тестирования и, возможно, добавил бы некоторую проверку уровня ошибок после завершения robocopy .

4
ответ дан 3 December 2019 в 06:06

Прошу прощения, но согласно документации на https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy :

/ xf [...] Исключает файлы, соответствующие указанным именам или пути. Обратите внимание, что имя файла может содержать подстановочные знаки (* и?).
/ xd [...] Исключает каталоги, соответствующие указанным именам и путям.

Таким образом, это конкретно означает, что подстановочные знаки могут использоваться во флаге / xf, но не во флаге / xd.

0
ответ дан 3 December 2019 в 06:06

Однако в документации Microsoft могут быть ошибки.

И в данном случае, по-видимому, так оно и есть. Мне нравится скрывать папки от копирования RoboCopy, поэтому я добавляю к их именам префикс «_».

Затем я добавляю '_*' (без кавычек) после параметра '/XD' в файл удаленного задания (.rcj).

Это работает! Microsoft, по-видимому, решила, что это подразумевается комментариями к параметру '/XF', и не сочла необходимым повторять его.

Ну, Майкософт, в справочном документе НАДО!

0
ответ дан 16 June 2021 в 23:54

Теги

Похожие вопросы