2016-09-27 101 views
0

我正在使用robocopy从目录中删除文件夹/文件。使用minage移动文件夹和文件的脚本

脚本:

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:\源\目录\ FILE1.TXT(12日龄)

C:\源\ directory2 \ FILE2.TXT(5天)

我的问题是此行的脚本:

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

该行不仅仅是RMDIR从源代码复制的目录,它将其全部删除。还有一个提示,我不能使用/移动,因为它会删除源目录。如果我使用/ 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 
+0

当然'rmdir/S'删除所有,这就是它的用途;您可以将'/ MOVE'选项添加到'robocopy'中,以便*将匹配的文件和目录移动到目标位置,然后您可以省略整个'for/D %% p'命令行... – aschipfl

+0

/move将删除父目录(源目录)。我需要能够保持这一点。所以它会删除'c:\ source'。另外,如果我使用/ mov,那么它不会删除'c:\ source'下的子目录。 –

+0

您可以使用forfiles进行年龄测试,然后编写您需要的任何命令。 'forfiles/D -10/C“cmd/c如果@ isdir == TRUE echo复制@relPath”' – FloatingKiwi

回答

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会显示一个错误说,它不能删除源文件夹,因为它正在使用中。

+0

这个很酷。但是,当我以这种方式运行批处理时,c:\ source1 \ abt文件夹的启动日期早于10天,我在批处理运行到当前日期后观察日期更改。 “abt”文件夹下还有一个“脚本”文件夹,它也过去有一个10天以前的日期,该批次运行后该日期也会更改为当前日期。那么会发生什么情况是,所有来自该“abt”文件夹下的文件移动到目的地,同时留下“c:\ source1 \ abt”和“c:\ source1 \ abt \ scripts”。但文件夹“c:\ source1 \ New Folder”不会移动或更改。 –

+0

基本上,它与我最初运行时没有将source1设置为当前活动目录并使用/ mov命令时发生的情况完全相同。 –

+0

我不知道这是否重要,但C:实际上是一个网络共享。为了公共网络的目的,我用C:\掩盖了它。 –

相关问题