在Windows中批量文件备份,重新创建嵌套文件夹/文件

时间:2012-03-26 09:13:15

标签: batch-file backup cmd

我目前有一个批处理文件,它从文件夹A中读取文件列表,如果超过某个日期将其复制到文件夹B并删除原始文件。

问题是我希望批处理文件在文件夹A中重新创建文件结构,我不太清楚如何做到这一点。这是代码:

echo off
echo REM :- THE FOLLOWING FILES ARE OLDER THAN 7 DAYS AND CAN BE MOVED TO BACKUP -:
pause
forfiles /p c:\test\one /s /m *.gif  /c "cmd /c dir /b/s/t:w @path"
echo.
echo REM :- CONTINUE TO MOVE THOSE FILES TO THE BACKUP LOCATION -:
pause
forfiles /p c:\test\one /s /m *.gif  /c "cmd /c mkdir c:\test\two\@relpath"
echo.
pause
forfiles /p c:\test\one /s /m *.gif  /c "cmd /c copy /-y @path c:\test\two\@relpath"
pause
echo.
echo REM :- THE FOLLOWING FILES EXIST IN THE BACKUP LOCATION -:
echo.
pause
dir "c:\test\two" /a/s/b /o:gn
echo.
echo REM :- CONTINUE TO DELETE THOSE BACKUPS -:
pause
rd /s "c:\test\two"
echo.
pause

问题是@relpath似乎占用了整个路径和文件名,因此在文件夹B中,我最终得到了自己名称的文件夹中的每个文件名(例如,同名文件夹中的'filename.gif')。如何从路径中删除文件名,根据该文件夹在文件夹B中创建文件结构,然后将文件复制到正确的位置?

由于

2 个答案:

答案 0 :(得分:2)

您可以使用xcopy使用/T开关重新创建文件结构。您还需要使用/E开关来复制空目录和子目录。

在cmd提示符下键入xcopy /?以获取所有交换机的帮助。希望这有帮助!

答案 1 :(得分:0)

你可以这样写:

forfiles /p c:\test\one /s /m *.gif /c "cmd /c mkdir c:\test\two\@relpath\.."

这会将生成的路径备份到父文件夹,以防止使用文件名。