Robocopyがコピー中に空のフォルダーを作成しないようにしようとしています。 SOURCEフォルダーは空ではありません。ただし、コピーする新しいファイルもありません。それでも、robocopyは宛先でそれらを作成します。
私の目標は、1日経過したファイルのコピーを作成することです。しかし、4つのファイルだけがコピーされたときに11,674の新しいフォルダとエントリがログに表示されないようにしたいのですが、毎日別の12kファイルでディスクを接続しないでください。4〜50ファイルの増分バックアップを実行します。
私はrobocopyがどのように機能するかをかなりよく知っています...そしてこれはほとんどの設計チームによって「欠陥」ではなく「機能」と見なされると確信しているので、MSに調査を依頼することはほとんど無意味です。
回避策は次のようにXCOPYを使用することですが、有効な日付を計算してフォーマットする必要があります。
E:\>xcopy C:\Users\Public\* E:\C_Users\Public\ /D:6-1-2018 /S /B /C /H /J /K /O /Y
何かアイデアや提案はありますか?
問題の例を次に示します。作成されたAdobeAppData階層がすべて空であることに注意してください。
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : Fri Jun 01 03:42:50 2018
Source : C:\Users\Public\
Dest : E:\20180601_Users_C\Public\
Files : *.*
Options : *.* /S /COPY:DATSO /B /NP /XJ /REG /MAXAGE:1 /MT:16 /R:3 /W:1
New Dir 2 C:\Users\Public\.idlerc\
New Dir 0 C:\Users\Public\AppData\
New Dir 4 C:\Users\Public\AppData\Local\
New File 7603 Resmon.ResmonCfg 100%
New Dir 0 C:\Users\Public\AppData\Local\Adobe\
New Dir 0 C:\Users\Public\AppData\Local\Adobe\AAMUpdater\
New Dir 7 C:\Users\Public\AppData\Local\Adobe\AAMUpdater\1.0\
New Dir 1 C:\Users\Public\AppData\Local\Adobe\AAMUpdater\1.0\Data\
[...snip...]
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 11674 11674 0 0 0 0
Files : 443686 4 443682 0 0 0
Bytes : 1.789 t 53.26 m 1.789 t 0 0 0
Times : 0:00:40 0:00:09 0:00:00 0:00:05
Ended : Fri Jun 01 03:43:09 2018
===========
これが私がやったことです(Publicをあなたのユーザー名に置き換えてください):
@echo off
@rem - create decent date and filename strings
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c%%a%%b)
for /f "tokens=1-2 delims=: " %%a in ('time /t') do (set mytime=%%a%%b)
set fname=E:\%mydate%_%mytime%_RClog_d.txt
@rem - copy newer files to a new timestamped tree
robocopy C:\Users\Public\ E:\%mydate%_Users_C\Public\ /XJD /ZB /S /COPY:DATSO /R:3 /W:1 /MAXAGE:7 /NC /NDL /FP /LOG:%fname% /NP
@rem - and this removes the empty folders created by the command above
robocopy E:\%mydate%_Users_C\Public\ E:\%mydate%_Users_C\Public\ /S /MOVE /NDL /LOG:NUL /NP
そして、これがディスクに表示されるものです。
06/04/2018 01:00 PM 9,644,168 20180604_0241_RClog.txt
06/10/2018 02:34 AM 563,342 20180610_0230_RClog_d.txt
06/10/2018 02:30 AM <DIR> 20180610_Users_C
06/10/2018 02:30 AM <DIR> 20180610_Users_D
06/17/2018 02:30 AM 394,755 20180617_0230_RClog_d.txt
06/17/2018 02:30 AM <DIR> 20180617_Users_C
06/17/2018 02:30 AM <DIR> 20180617_Users_D
06/24/2018 02:30 AM 833,475 20180624_0230_RClog_d.txt
06/24/2018 02:30 AM <DIR> 20180624_Users_C
06/24/2018 02:30 AM <DIR> 20180624_Users_D
07/01/2018 02:31 AM 891,884 20180701_0230_RClog_d.txt
07/01/2018 02:30 AM <DIR> 20180701_Users_C
07/01/2018 02:31 AM <DIR> 20180701_Users_D
09/17/2017 01:09 AM <DIR> Users_C
06/04/2018 12:32 PM <DIR> Users_D
/MIR
パラメータの代わりに/S
パラメータを使用して、ディレクトリがすでに存在する場合に宛先にコピーされないようにする必要があるようです。/MIR
パラメータを使用すると、空のディレクトリが宛先の場所にコピーされるため、これは、実行ごとに既存のディレクトリが再度コピーされないようにするためのトレードオフです。宛先の場所にある空のディレクトリをすばやく削除する簡単な回避策があります。これには、Robocopy <dest> <dest> /S /MOVE
パラメータを使用するコマンドの実行直後に/MIR
を実行する必要があります。/NDL
パラメータを追加するだけです。Robocopy "<Source>" "<Destination>" *.* /MIR /COPY:DATSO /B /NP /NDL /XJ /REG /MAXAGE:1 /MT:16 /R:3 /W:1
Robocopy <dest> <dest> /S /MOVE
重要な注意事項:
/MIR
スイッチを使用すると、ソースに存在しなくなった宛先のファイルとフォルダーが宛先から削除されることも意味します。スクリプトの実行ごとに空のディレクトリをコピーするのと、スクリプトの実行ごとに同じ数千のディレクトリをコピーして、宛先にすでに存在する宛先にコピーするのは、少額の費用のように思えます。これらは簡単かつ迅速に削除できるため、これは簡単なことのように思えます。
空のディレクトリを宛先から削除する
Robocopy <dest> <dest> /S /MOVE
のRobocopyコマンドは、送信元と宛先の両方に宛先の場所を使用します
Robocopy /?
/MIR :: MIRror a directory tree (equivalent to /E plus /PURGE). /MOVE :: MOVE files AND dirs (delete from source after copying). /NDL :: No Directory List - don't log directory names.