在我的 C# 应用程序中,我使用 robocopy 并选择/s
复制子文件夹。
假设我有上个月的文件和文件夹。
它将首先复制哪个文件,最新的文件还是最旧的文件?
有什么方法可以指定它应该先复制旧文件或反之亦然?
答案1
如果你想先复制较新的(最近的)文件,你可以使用 Robocopy/MAXAGE:n
和/MINAGE:n
命令行选项。
您必须运行 Robocopy 2 次或更多次(取决于您想要通过文件的“年龄”来控制文件复制顺序的程度)。
以下是关于/MAXAGE:n
和/MINAGE:n
命令行选项:
/MAXAGE:n :: MAXimum file AGE - exclude files older than n days/date.
/MINAGE:n :: MINimum file AGE - exclude files newer than n days/date.
(If n < 1900 then n = n days, else n = YYYYMMDD date).
例如,在最简单的情况下,您可以先复制最多 1 天前的文件,然后在完成后复制所有至少 1 天前的文件。以下是此(第一个)示例的 2 个 Robocopy 命令行:
First run of Robocopy:
robocopy "C:\source\path" "C:\dest\path" /S /COPY:DAT /DCOPY:T /MAXAGE:1
Second run of Robocopy:
robocopy "C:\source\path" "C:\dest\path" /S /COPY:DAT /DCOPY:T /MINAGE:1
如果您想要更多控制,可以结合使用这两个选项。例如:
- 首先复制最多 1 天前的所有文件
- 然后复制至少 1 天前、最多 2 天前的文件
- 然后复制至少 2 天前、最多 3 天前的文件
- 然后复制至少 3 天前、最多 5 天前的文件
- 然后复制至少 5 天前的文件(所有剩余的文件)
以下是此(第二个)示例的 Robocopy 命令行:
robocopy "C:\source\path" "C:\dest\path" /S /COPY:DAT /DCOPY:T /MAXAGE:1
robocopy "C:\source\path" "C:\dest\path" /S /COPY:DAT /DCOPY:T /MAXAGE:2 /MINAGE:1
robocopy "C:\source\path" "C:\dest\path" /S /COPY:DAT /DCOPY:T /MAXAGE:3 /MINAGE:2
robocopy "C:\source\path" "C:\dest\path" /S /COPY:DAT /DCOPY:T /MAXAGE:5 /MINAGE:3
robocopy "C:\source\path" "C:\dest\path" /S /COPY:DAT /DCOPY:T /MINAGE:5
如果你想查看 Robocopy 复制文件的顺序,你可以使用/L
选项:
robocopy "C:\source\path" "C:\dest\path" /S /COPY:DAT /DCOPY:T /MAXAGE:1 /L
随着/L
选项,Robocopy 将只列出“会”被复制,但实际上不会复制任何文件。
答案2
robocopy 将首先复制它首先从操作系统获取的文件和目录。如果您想要特定的顺序 - 您必须注意这一点:
- 列出你的文件
- 按日期排序
- 为每个文件调用 robocopy
这应该可以解决你的问题。