2016-09-27 12 views
0

私はrobocopyを使用してディレクトリからフォルダやファイルを削除しています。 minageでフォルダとファイルを移動するスクリプト

スクリプト:

C:\(12日齢)のソースの\ディレクトリ\ FILE1.TXT

C:\ソース\ directory2 \

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 

ソースディレクトリは次のようになりますFILE2.TXT(5日齢)

私の問題は、スクリプトにこの行です:

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

この行は、ソースからコピーされたディレクトリのRMDIRだけではなく、すべてのディレクトリを削除します。とメモ、私は使用することはできません/ソースディレクトリを削除するように移動します。/movを使用すると、すべてのサブディレクトリが削除されることはありません。

私はここで何が間違っていますか?前もって感謝します。

EDIT:トラブルシューティングのためのソースディレクトリ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'は全てを削除します。 '/ MO%'オプションを 'robocopy'に追加することで、ファイルやディレクトリが目的地に移動するようにすることができます。'/D %% p 'のコマンドライン全体を省略することができます... – aschipfl

+0

/moveが削除されます親ディレクトリ(ソースディレクトリ)。私はそれを保つことができる必要があります。したがって、 'c:\ source'は削除されます。また、/ movを使用した場合、サブディレクトリの 'c:\ source'の下には削除されません。 –

+0

forfilesを使用して年齢検査を行い、必要なコマンドを書き込むことができます。 'forfiles/D -10/C" cmd/c if isdir == TRUEエコーコピー@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"フォルダの下に "scripts"フォルダもあります。また、10日以上経過した日付を持っていて、その日付もバッチ実行後の現在の日付に変わります。だから、その "abt"フォルダの下にあるすべてのファイルは、 "c:\ source1 \ abt"と "c:\ source1 \ abt \ scripts"の両方を残して移動先に移動します。しかし、フォルダ "c:\ source1 \ New Folder"は移動も変更もしません。 –

+0

基本的には、source1を現在のアクティブディレクトリに設定せずに元々実行したときとまったく同じことですが、/ movコマンドを使用します。 –

+0

このことが重要かどうかわかりませんが、C:は実際にはネットワーク共有です。私はパブリックウェブ用にC:\でマスクしました。 –

関連する問題