robocopy额外文件移动到另一个文件夹

时间:2012-01-26 17:54:18

标签: batch-file filesystems dos robocopy

我正在尝试编写一个批处理,将所有文件(子文件夹中的文件)从directory1复制到directory2,然后将directory2中找到的任何额外文件(或目录,如果可能)移动到directory3。 换句话说,我正在尝试使用directory1镜像directory2,而不是清除操作,将额外的文件移动到directory3 ...

到目前为止,我已经能够在文本文件中获取这些额外的文件......现在,我不知道如何继续......

ROBOCOPY directory1 directory2 /E /COPYALL /R:0 /XO /X /tee /njh /njs /np /ns /nc /ndl > Extrafiles.txt

此外,Extrafiles.txt在每个文件路径的开头都包含许多额外的空格,这意味着在移动文件之前需要进行一些字符串操作。如果目标目录不存在,可以通过自动创建目标目录来使用哪个命令来移动文件?

Extrafiles.txt的示例输出

                directory2\File1.txt
                directory2\subdirectory2\deeper\File2.txt

任何帮助将不胜感激。谢谢。

让它更清晰:

假设directory1包含:

\subdir1
    file4.txt
    file5.txt
    \deeper
        file6.txt
        file7.doc
file1.txt
file2.txt

和directory2已经包含:

\subdir1
    file4.txt
    file007.ppt
    \deeper
        file6.txt
        file7.doc
        \deepest
            file155.txt
file1.txt

然后我希望复制这些文件:

directory1\file2.txt to directory2\file2.txt
directory1\subdir1\file5.txt to directory2\subdir1\file5.txt

然后移动这些文件:

directory2\subdir1\file007.ppt to directory3\subdir1\file007.ppt
directory2\subdir1\deeper\deepest\file155.txt to directory3\subdir1\deeper\deepest\file155.txt

希望我说得够清楚:)。

1 个答案:

答案 0 :(得分:1)

您可以使用for来迭代robocopy生成的文件内容(请参阅for /?)。

然后你可以使用延迟扩展和变量替换来生成目标路径(参见set /?),最后调用一个子例程,如果需要,将mkdir后跟move(参见call /? @echo off setlocal enabledelayedexpansion set srcdir=directory2 set tgtdir=directory3 for /f "usebackq tokens=*" %%A in ("Extrafiles.txt") do ( set srcpath=%%A set tgtpath=!srcpath:%srcdir%=%tgtdir%! call :mkdirmove !srcpath! !tgtpath! ) goto :EOF :mkdirmove if not exist %~dp2nul mkdir %~dp2 move %1 %2 goto :EOF )。

草案解决方案将是:

{{1}}