1

我正在尝试编写一个批处理来将所有文件(子文件夹中的文件)从 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

希望我说得足够清楚:)

4

1 回答 1

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
于 2012-01-26T23:15:59.247 回答