さて、またしても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分置きにフォルダ監視して変化があったらコピー先に
ファイル移動する常駐機能が実現できます。
これだと単独で実行させて、
タスクスケジューラで繰り返し実行すればいいじゃない?
と思うかもしれませんが、コードとして手元に残せるので、
管理者の観点で見ると,こちらのほうがいいと思います。
後でコードを見れば何をしたいかわかりますからね。
コメントつけられますし。
ではでは。