使用minage移动文件夹和文件的脚本

时间:2016-09-27 17:30:08

标签: batch-file vbscript robocopy

我正在使用robocopy从目录中删除文件夹/文件。

剧本:

  SET source1=c:\source
  SET destination=F:\destination
  SET switch1=/r:10 /w:1 /e /create /minage:10 /mt /LOG:F:\logs\backup.log

  FOR /d %%i IN ("%source1%\*") DO ROBOCOPY "%%i" "%destination%\%%~nxi" %switch1%
  FOR /d %%p IN ("%source1%\*") DO RMDIR "%%p" /s /q
  FOR /d %%q IN ("%destination%\*") DO RMDIR "%%q" /s /q

源目录如下所示:

c:\ source \ directory \ file1.txt(12天之久)

c:\ source \ directory2 \ file2.txt(5天之久)

我的问题是脚本中的这一行:

FOR /d %%p IN ("%source1%\*") DO RMDIR "%%p" /s /q

该行不仅仅是从源复制的目录的RMDIR,它将它们全部删除。并且注意,我不能使用/ move因为它会删除源目录。如果我使用/ mov它将不会删除所有子目录。

有什么想法我在这里错了吗?提前谢谢。

编辑:我包含源目录dir / tw / s信息以进行故障排除。 ABT文件夹是应删除的文件夹。

 Directory of C:\

09/27/2016  03:08 PM    <DIR>    .
09/27/2016  12:10 PM    <DIR>    ..
09/27/2016  03:09 PM    <DIR>    New Folder
06/25/2014  05:47 AM    <DIR>    abt
               0 File(s)

 Directory of C:\New folder

09/27/2016  03:09 PM    <DIR>
09/27/2016  03:08 PM    <DIR>
09/27/2016  03:09 PM
               1 File(s)

 Directory of C:\abt

06/25/2014  05:47 AM    <DIR>
09/27/2016  03:08 PM    <DIR>
03/20/2014  10:08 AM
06/25/2014  05:47 AM
04/28/2014  02:33 PM
05/20/2014  10:47 AM    <DIR>
02/18/2014  07:24 PM
05/20/2014  10:51 AM
               5 File(s)

 Directory of C:\abt\Scripts

05/20/2014  10:47 AM    <DIR>
06/25/2014  05:47 AM    <DIR>
10/02/2012  11:18 AM
02/02/2012  12:16 PM
02/17/2012  11:32 AM

1 个答案:

答案 0 :(得分:2)

如果robocopy可以处理除文件夹删除之外的所有内容,您唯一需要做的就是确保robocopy无法删除该文件夹。

这可以通过将源文件夹设置为当前活动目录来完成。您无法删除正在使用的文件夹。

SET "source1=c:\source"
SET "destination=F:\destination"
SET "switch1=/move /e /create /minage:10 /r:10 /w:1 /LOG+:F:\logs\backup.log"

pushd "%source1%" && (
    robocopy . "%destination%" %switch1%
    popd
)

唯一的缺点是robocopy会显示错误,说明它无法删除源文件夹,因为它正在使用中。