2016-09-27 99 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:\掩蓋了它。 –

相關問題