我正在尝试编写一个批处理,将所有文件(子文件夹中的文件)从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
希望我说得够清楚:)。
答案 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}}