タグは、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
実際に見る
保存したスクリプトを実行します。
コンソールウィンドウが点滅するのがわかります。コンソールウィンドウが実行されていることを示す唯一の表示を閉じた後、いくつかの新しいプロセスが表示されます。
テストするためにデスクトップでいくつかのことを行います。
- 実行したくない場合は、作成したPowerShellプロセスを終了します。
背景情報 -この回答で使用されているツールに慣れていない場合。