[解決済み】ロボコピーのMaxage MinageとMir Parameterの関係
質問
コピー元からコピー先へのロボコピーを使用しています。
以下のようにすると、すべてのファイルが移動します。
Step 1: robocopy c:\Source C:\Destination /MIR
現在、ステップの2番目のコマンドを実行すると、2019年1月1日以前のものは/MIRパラメータで宛先から削除されるはずですが、これは発生しません(2019年1月以降のファイルは、/MIRコマンドで削除されず、まだフォルダに残っています)。この問題を解決するにはどうしたらよいでしょうか。20190101より前のものを削除しますか?
Step 2: robocopy c:\Source C:\Destination /MIR /maxage:19000101 /minage:20190101"
解決方法は?
を使おうとしているのだと思うので、これは奇妙な動作に見えます。
/MINAGE
スイッチで、2019年1月1日より若いものをすべて選択します。そして、それを
/MIR
スイッチ、より具体的には
/PURGE /E
スイッチで、余分なファイルやディレクトリを削除することができます。
後
2019年1月1日です。
これがうまくいかないのは
/MINAGE
スイッチは
に選択されています。
コピー
の場合であっても
/MIR
コマンドは期待通りに動作します。
2019年1月1日より古いファイル1つと、新しいファイル1つの計2つのファイルがあるとします。
C:\Source C:\Destination
File-2018.txt
File-2019.txt
標準の
\MIR
コマンドを使用します。
Robocopy.exe C:\Source C:\Destination /MIR
両方のファイルが期待通りにコピーされます。
2 files Copied
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
保存先に余分なファイルを追加すると
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
File-2020.txt
そして、再実行する
/MIR
コマンドを実行します。
Robocopy.exe C:\Source C:\Destination /MIR
予想通り、余分なファイルが削除されていることがわかります。
2 files Skipped
1 files Extras
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
には
\MIR
コマンドを追加した場合、その後に
/MINAGE
パラメータで、2019年1月1日以降のものを残し、それ以外を削除するよう求めていると考えています。
Robocopy.exe C:\Source C:\Destination /MIR /MINAGE:20190101
思いがけないものを手に入れる。
2 files Skipped
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
何が起こっているのか、なぜファイルをスキップするのか、よりよく説明するために、別のパラメータ、Include Skippedを追加してみましょう。
\IS
:
Robocopy.exe C:\Source C:\Destination /MIR /IS /MINAGE:20190101
得ることができます。
1 files Copied
1 files Skipped
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
つまり
\MINAGE
パラメータのみ
フィルタリング
にしたいものを
コピー
. ディレクトリをリセットしてクリアし、再実行すると、何が起こったのかがよくわかります。
Remove-Item C:\Destination -Force
C:\Source C:\Destination
File-2018.txt
File-2019.txt
Robocopy.exe C:\Source C:\Destination /MIR /MINAGE:20190101
得ることができます。
1 files Copied
1 files Skipped
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt
を上書きコピーしたのです。
古い
ファイルではなく
新しい
ファイルです。つまり、ソース内のファイルを反復処理する際に
/MINAGE
パラメータを使用して
何
に必要なファイル
コピー
でなく、どのファイルを
削除する
.
このような動作になる理由は
/MINAGE
と対応する
/MAXAGE
パラメータは、非常に大きなディレクトリで、ネットワークが遅い場合や、コピー先のコンピュータが小さい場合、特定のファイルだけをコピーしたい場合(例えば、昨日からの新しいファイルだけ)、また、必ずしも
すべて
を使用します。このような場合、ファイルのセットは通常 "Deltas" であるため、ミラーリングは通常実行されないか、または希望されないことがほとんどです。
削除よりコピーを強調するために、ディレクトリをミラーリングした後、古いファイルと新しいファイルの2つの余分なファイルを デスティネーション :
C:\Source C:\Destination
File-2017.txt
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
File-2020.txt
そして、インクルードをスキップして再実行します。
/IS
何がコピーされているかがわかるように。
Robocopy.exe C:\Source C:\Destination /MIR /IS /MINAGE:20190101
やや意外なものを手に入れた。
1 files Copied
1 files Skipped
2 files Extras
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
これは、以下のことを強調しています。
/MIR
は、その...その...のためのものです。
ミラーリング
. 他のパラメータは
何
から
コピー
.
まずはコピーに関わるソースファイルから。
C:\Source
File-2018.txt
File-2019.txt
フィルタリングを適用するために、スキップされたインクルード
/IS
と
/MINAGE
:
C:\Source
File-2018.txt <- 1 files Copied
File-2019.txt <- 1 files Skipped
次に
\MIR
ミラーコマンドが実行され
のファイルをすべて削除します。
ソースファイルに含まれていない
:
C:\Destination
File-2017.txt <- 2 files Extra
File-2020.txt
Extraファイルの古さに関係なく
簡単な解決策は、最初からすべてをコピーオーバーしないことです。空のディレクトリから始めて、2019年1月1日より若いファイルだけをコピーします。
Remove-Item C:\Destination -Force
Robocopy.exe C:\Source C:\Destination /E /MINAGE:20190101
編集
改良された方法(最初にディレクトリ全体を削除するのではなく、保存先でクリーンアップスクリプトを実行して、保存先から2019年1月1日より若いアイテムを最初に削除するだけです。
#Cleanup younger files
Get-ChildItem C:\Destination -Recurse | Where { $_.LastWriteTime -gt (Get-Date '2019-01-01')} | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
#Mirror over new files
Robocopy.exe C:\Source C:\Destination /MIR /MINAGE:20190101
関連
-
[解決済み】Powershell: 引数 "xxx" を受け入れる位置パラメーターが見つからない。
-
[解決済み] Export-Csv - パス 'C:\export.csv' へのアクセスは拒否されました。
-
[解決済み] PowerShellで、変数が数値を保持しているかどうかをテストするにはどうすればよいですか?
-
[解決済み] AzureのAdd-AzureDiskが動作しない
-
[解決済み] "get-wmiobject win32_process -computername" でエラー "Access denied , code 0x80070005" が発生する。
-
[解決済み] Powershell ISE 内の別の PS1 スクリプトから PowerShell スクリプト PS1 を呼び出す
-
[解決済み] 'Connect-MsolService' はコマンドレット名として認識されません。
-
[解決済み] Powershell send-mailmessage - 複数の受信者にメールを送信する
-
[解決済み] Write-ErrorとThrowはいつ使い分ける?終端エラーと非終端エラー
-
[解決済み] powershellでToStringを使用して日付をフォーマットする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】powershellにターミネーターがない。"
-
[解決済み】Invoke-Command エラー "Parameter set cannot be resolved using specified named parameters".
-
[解決済み] Send-MailMessage - リモートサーバーに接続できません。
-
[解決済み] Export-Csv - パス 'C:\export.csv' へのアクセスは拒否されました。
-
[解決済み] [System.Web.Security.Membership]::GeneratePassword() - Type Not found
-
[解決済み] いずれかのキーを押して続行[複製]。
-
[解決済み] Write-ErrorとThrowはいつ使い分ける?終端エラーと非終端エラー
-
[解決済み] 実行中のPowerShellスクリプトからすべての環境変数を表示する
-
[解決済み] Join-Pathを使って、2つ以上の文字列をファイルパスに結合するにはどうすればよいですか?
-
[解決済み] PowerShellでコマンド出力に改行を追加するにはどうすればよいですか?