Falconの思うままに

PASCAL好きが、気ままにマニアックなネタを

Robocopyでフォルダを常駐監視

さて、またしてもPoweShellネタです。

MS-DOSの時代、コマンドプロンプトしかなかったですから、

コマンドを叩いているとすごい人にみえたものです(笑)

なのでコマンドをたたくPowerShellはすごく好きではあります。

 

本題ですが、Robocopyというコマンドを御存じでしょうか?

ファイルコピーをフォルダごとしたり、差分バックアップをしたりと

すごく強力なコピーツールです。標準で入ってます。

これがある為、自前でファイルコピーツールなんて作る気が失せます。

(昔はDelphiでファイルコピーしてました。)

なので、ネットワーク切断で共有フォルダへのコピーが失敗した場合の

リトライなども簡単に指定できます。

すごいでしょう!!! 

 

/MOT /MON という引数でファイル監視して定期コピーしてくれるのですが、

コマンドは実行中で帰ってきません。そうブロックします。

なのでバッチに書くと終わらないのと、黒い画面が出っぱなしに

なるので、閉じられても困ります。

 

ということで、PowerShellの出番です。

別プロセスで起動して、ウインドウ表示オフで起動させます。

 

あれ? なんか最近の記事で書いたような.....

そうもっと簡単にできたんではないかと気づいてしまいました。

 

Start-Process というコマンドレットがあるのでそれを実行するだけで

ウインドウが消えて起動してくれることを覚えました。

なのでファイル監視ソフトは

------------------------------------------------

$src = "xxx"
$dest = "xxx"
$cmd = $src+" "+$dest+" /s /r:0 /MOV /MON:1 /MOT:5" 
Start-Process -FilePath robocopy -ArgumentList $cmd -WindowStyle Hidden

------------------------------------------------

というPowerShellスクリプトを書いて実行すればいいです。

$srcと$destにはコピー元、コピー先のパスを指定します。

上記ですと5分置きにフォルダ監視して変化があったらコピー先に

ファイル移動する常駐機能が実現できます。

 

これだと単独で実行させて、

タスクスケジューラで繰り返し実行すればいいじゃない?

と思うかもしれませんが、コードとして手元に残せるので、

管理者の観点で見ると,こちらのほうがいいと思います。

後でコードを見れば何をしたいかわかりますからね。

コメントつけられますし。

 

 

ではでは。