我有一个文件扩展名列表,我需要收集特定目录中的所有文件,同时保留属性,时间戳等,这导致我使用了Robocopy。我希望有人能提出比我目前的解决方案更有效的方法吗?
目前,我使用以下命令将这些文件复制到“未处理”目录中:
robocopy %Directory1% "%Directory2%\unprocessed" /Z /E /copy:dat *.pst *.ost *.doc *.docx *.pdf *.docm *.xls *.xlsx *.ppt /log+:%Directory%.txt
然后,从“未处理”目录中收集的各个文件将分类到以每个文件扩展名命名的单个文件夹,并在与“未处理”目录相同的级别创建,再次使用单独的Robocopy命令:
robocopy "%directory2%\unprocessed" %directory2%\pst *.pst /Z /E
...
...
robocopy "%directory2%\unprocessed" %directory2%\ppt *ppt /Z /E
如您所知,这会导致“未处理”目录多次不必要的迭代。由于robocopy的性质,我无法将文件直接复制到最终的休息位置所以我希望有人可以建议一个更合适的解决方案,仍然允许文件属性保持完整。
(我事先道歉,这可能会变成一个讨论,而不是有人直接回答这个问题)
答案 0 :(得分:1)
考虑到示例中的百分号,看起来您可能正在将其作为批处理文件的一部分运行。无论哪种方式,如果您定义了环境变量,您可以使用以下内容:
命令行:
for %e in (pst ost doc docx pdf dcom xls xlsx ppt) do robocopy "%Directory1%" "%Directory2%\%e" /Z /E /copy:dat *.%e /log+:%Directory%.txt
Bat文件:
for %%e in (pst ost doc docx pdf dcom xls xlsx ppt) do robocopy "%Directory1%" "%Directory2%\%%e" /Z /E /copy:dat *.%%e /log+:%Directory%.txt
另外需要注意的一点是:您可能最终会在doc和docx中找到所有docx文件,同样xlsx最终会同时出现在xls和xlsx中。 Windows总是选择带有3个字符扩展名的更长扩展名。