Robocopyは、1分未満の時間増分でファイルを監視できますか?


10

Robocopyソースディレクトリを監視し、変更のあるファイルをコピーするオプションがあります。あなたは、ディレクトリ内の多くの変更がコピーする前に発生しなければならない方法を指定する(できる/mon n場所n変更の数がある)とどのくらい(再スキャンする前に待機する/mot t場所をt分単位で待機する時間があります)。

スキャンしているファイルが1つしかないので、ほぼ継続的にフォルダーを監視したいと思います。ロボコピーモニターを1分未満の時間で作成することはできません。試してみまし/mot 0.5たが失敗しました。私も試してみましたが/mot 0、robocopyは継続的に監視することなく、1回スキャンした後に終了します。

1分未満の時間増分で、ロボコピーにフォルダーをほぼ連続的にスキャンさせるにはどうすればよいですか?または、ファイルソースを常に監視し、変更をリアルタイムでコピーできる他のコマンドラインツールはありますか?


Robocopyである必要がありますか?
Ƭᴇcʜιᴇ007

@ techie007同じ要件を達成する他のものがあれば、それでかまいませんが、可能であればサードパーティのツールを避けたいです。しかし、サードパーティの完璧なソリューションがある場合、私はそれを検討したいと思います。
nhinkle 2012年

@ techie007-nhinkleとまったく同じ問題があり、Robocopyをまったく同じ方法で使用しています。Windowsで適切に機能する代替ソリューションを知っている場合は、私はそれを受け入れます。それを私たちと共有してください
Durden81 2014年

今Freefilesyncをテストしています。必要なツールのようです。
Durden81 2014年

回答:


8

ロボコピー

/mot:<M>
Monitors source, and runs again in M minutes if changes are detected.

引数として数分しか受け入れないため、これ以上頻繁に実行するように強制することはできないと思います。ただし、バッチファイルを使用して実行し、ロボコピー内ではなく、バッチファイルまたはスケジュールされたタスクでタイミングとループを発生させることができます。


1
ええ、私は "ping -n 1 -w 500 1.2.3.4> NUL"を使用して0.5秒スリープし、:LABELとGOTOステートメント(cmd内)でループします
Stig Eide

13

タグは、Windows 8を使用していることを示しています。PowerShellという優れたツールと、という名前の便利な小さなコマンドレットがあるので、これは良いことですRegister-ObjectEvent

テキストファイルを作成し、拡張子をに変更して.ps1、以下のスクリプトをファイルに貼り付けます。$watchedFolder変数を、監視するフォルダーに変更します。Do-Something関数を変更して、robocopyコマンドなどを含めます。スクリプトが実行されている限り、監視フォルダーでファイルまたはフォルダーが変更されるたびに、その関数が実行されます(ほぼ瞬時に!​​)。

このスクリプトをWindowsの起動時に実行し、タイマーを使用せずに常にバックグラウンドで実行することができます。

$block = {    
    function Do-Something
    {
        param ($message, $event)
        # function to call when event is raised
        # do a robocopy or whatever

        Start-Process cmd.exe "/C echo $("{0} {1}" -f $event.SourceEventArgs.FullPath, $message)&pause"
    }

    $watchedFolder = "C:\Users\Admin-PC\Desktop"
    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = $watchedFolder

    Register-ObjectEvent -InputObject $watcher -EventName Created -SourceIdentifier File.Created -Action { Do-Something "Created" $event }
    Register-ObjectEvent -InputObject $watcher -EventName Deleted -SourceIdentifier File.Deleted -Action { Do-Something "Deleted" $event }
    Register-ObjectEvent -InputObject $watcher -EventName Changed -SourceIdentifier File.Changed -Action { Do-Something "Changed" $event }
    Register-ObjectEvent -InputObject $watcher -EventName Renamed -SourceIdentifier File.Renamed -Action { Do-Something "Renamed" $event }
}

$encodedBlock = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($block))

Start-Process PowerShell.exe -verb Runas -argumentlist '-WindowStyle Hidden', '-NoExit', '-EncodedCommand', $encodedBlock

実際に見る


  1. 保存したスクリプトを実行します。
    保存したスクリプトを実行します。

  2. コンソールウィンドウが点滅するのがわかります。コンソールウィンドウが実行されていることを示す唯一の表示を閉じた後、いくつかの新しいプロセスが表示されます。
    ここに画像の説明を入力してください

  3. テストするためにデスクトップでいくつかのことを行います。
    ここに画像の説明を入力してください

  4. 実行したくない場合は、作成したPowerShellプロセスを終了します。

背景情報 -この回答で使用されているツールに慣れていない場合。


  • 詳細System.IO.FileSystemWatcherについては、MSDNページにアクセスしてください
  • PowerShellのイベントのその他の例については、このブログをご覧ください。
  • Windows PowerShellの入門書として、このサイトが役立つことがわかりました(その日のヒントが好きです)。
  • 古いバージョンのWindowsを使用している場合、または何らかの理由でPowerShellがインストールされていない場合は、Windows Management Framework 4.0をダウンロードできます。

1
これが最良の答えです。このソリューションはイベント駆動型です。つまり、変更が発生するまでCPUを使用せず、プログラムは即座に応答して実行されます。また、優れた書き込み。
CoolHandLouis 2017

5

DSynchronizeは、ハードディスク、フロッピーディスク、LAN、USBキー、CD-DVD(パケット書き込みソフトウェアを使用)、およびFTPサーバー上の2つ以上のフォルダーを定期的に同期できるスタンドアロンユーティリティです。それは問題が正確に何であるかではなく、私が見つけることができる最も近いものです。

私も、Robocopyでの1分の最小時間の解決策を探していて、この2年前の質問を見つけました。私はこのソフトウェアを提案されてしまい、それが私が使っているものです。ちなみに、私はこのソフトウェアとは関係ありません。

長所:

  • リアルタイム同期があります。
  • 複数のフォルダペアを追加し、それらの横にあるチェックボックスを使用して、同時にアクティブにするペアを選択できます。
  • インストーラーなし、スタンドアロンプ​​ログラム。
  • 「フィルター」ボタンをクリックして、パターンを介して、または変更された時間でファイルを除外または含めることができます。
  • (その他。下のスクリーンショットを参照してください。チェックボックスとボタンには追加のヘルプツールチップがあります。)

短所:

  • GUIユーティリティであり、使用可能なコマンドラインスイッチはありません
  • フォルダペアはすべて同じ設定を共有します

スクリーンショット

リアルタイム同期オプションは、「特別オプション」セクションのスクリーンショットでマークされています。これは、質問が目標として説明しているようです。チェックされておらず、タイマーが設定されていない場合は、[同期]ボタンをクリックして1回限りの同期を開始できます。

2つのフォルダを同期する方法:

  • 左上にある参照ダイアログを使用して、監視するソースフォルダーを選択します。
  • 右上隅で変更をコピーする先のフォルダーを選択します。
  • (オプション)参照ダイアログを使用する代わりに手動でフォルダーパスを入力した場合は、上部の2つのボックスの間にある[テスト]ボタンをクリックして、それらのフォルダーが実際に存在するかどうかを確認します。また、ほとんどの場合、「存在しない場合はフォルダを作成する」をチェックして、新しいフォルダがコピーされることを確認します。これは、デフォルトでオフになっているため、プログラムはデフォルトでファイルのみをコピーするためです。
  • [リアルタイム同期]チェックボックスをオンにします。これで同期がアクティブになり、左側のフォルダーからのすべての変更が右側のフォルダーにコピーされます。

ソフトウェアの動作を示すこのYouTubeビデオも見つけました。それは古いバージョンを示し、オプションは同じ場所にありませんが、ソフトウェアがどのように動作するかを感じさせます。


質問は、(Robocopyで)何かを実現する方法を尋ねます。別のツールを使用して同じ結果を達成する方法を説明し、代替ソリューションを提案することは問題ありません。ただし、これは実際に問題を解決する方法を説明するものではありません。
fixer1234 2015年

@ fixer1234私は元々質問にコメントするつもりでしたが、どうやら私のアカウントはそれを行うにはあまりにも新しいです(どうやら自分の回答にコメントすることができます)。私も、ロボコピーの1分の最小時間の解決策を探していて、この2年前の質問を見つけました。私は上記のソフトウェアを提案されてしまい、それが私が使っているものです。同じ状況にいる他の人がそれを便利だと思ったのはそれだけです。(同期フォルダ)一見単純なタスクのために、それはあなたが解決策を見つけるために検索する必要がどのくらい驚くべきことだ...
アシュリー・ウィルソン

私の答えの明快さについては-私はスクリーンショットを添付できればいいのですが(もう一度、それはそれを許可するにはアカウントが新しすぎます)それはそれをはるかに明確にしました-それは1画面のGUIであり、すべてのオプションは明確に見えてシンプルです理解する。
アシュレイウィルソン

ファイル共有サービスを使用している場合は、画像へのリンクを追加するだけで、誰かがそれを埋め込みます。定期的に使用しない場合は、無料のものがたくさんあります(imgur.comなど)。
fixer1234 2015年

これはスクリーンショットです:i.imgur.com/F7heg9A.png
アシュリーウィルソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.