私は自分のVistaマシンにある種のスクリプトを設定する必要があります。そうすれば、ファイルが特定のフォルダに追加されたときはいつでも、それはそのファイルに作用するバックグラウンドプロセスを自動的に引き起こします。 (バックグラウンドプロセスは単なるコマンドラインユーティリティで、ファイル名を引数として受け取ります。その他の定義済みオプションもあります。)
パフォーマンスとメンテナンスのために、可能であれば、ネイティブのWindows機能を使用してこれを行いたいと思います。私はTask Schedulerの使用を検討しましたが、しばらくトリガー・システムを熟読した後、それを理解することができなくなり、必要なことができるかどうかさえわかりません。
私はどんな提案にも感謝します。ありがとうございます。
提案をありがとう。
私は結局、Linker3000のフォルダをポーリングし、タスクスケジューラを使って起動時に実行させるという考え方に基づいたVBScriptを書きました。私は this resource から基本的な構文を得て、必要な調整をしました。
スクリプトの中身をイベント駆動型システム上で実行するようにして、まだ最適化したいと思っていますが、作業に間に合わなくて十分です。これで十分です。
これは、誰かが興味を持った場合のためのスクリプトです(明確にするために無関係の変換セグメントが削除されています)。
' FOLDER TO MONITOR
strFolder = "J:\monitored-folder"
' FREQUENCY TO CHECK IT, IN SECONDS
nFrequency = 10
strComputer = "."
strQueryFolder = Replace(strFolder, "\", "\\\\")
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery ("SELECT * FROM __InstanceCreationEvent WITHIN " & nFrequency & " WHERE Targetinstance ISA 'CIM_DirectoryContainsFile' and TargetInstance.GroupComponent='Win32_Directory.Name=""" & strQueryFolder & """'")
Do
Set objLatestEvent = colMonitoredEvents.NextEvent
strNewFile = objLatestEvent.TargetInstance.PartComponent
arrNewFile = Split(strNewFile, "=")
strFilePath = arrNewFile(1)
strFilePath = Replace(strFilePath, "\\", "\")
strFilePath = Replace(strFilePath, Chr(34), "")
strFileName = Replace(strFilePath, strFolder, "")
strTempFilePath = WScript.CreateObject("Scripting.FileSystemObject").GetSpecialFolder(2) & "\TEMP.M4A"
' DO THE OPERATION STUFF
' ...
Loop
(また、私はこの質問を公式に未回答のままにしたくありません - そして私は自分の質問に対する回答を受け入れたくありません - しかし、Linker3000の回答を感謝しました!)
職場では、フォルダの監視にPowershellを使用しています。
Windows Vista(.NETおよびPowerShellがプレインストールされている)から追加のツールなしで使用できます。
このスクリプトは特定のフォルダを監視し、ログファイルを書き込みます。あなたはアクションを置き換えて、あなたが望むことをすることができます例えば外部ツールを呼び出す
11/23/2014 19:22:04、作成、D:\ source\New Text Document.txt [11:23] 2014/11/23 19:22:09、変更、D:\ source\New Text Document.txt 2014/11/23 19:22:09、変更、D:\ source\New Text Document.txt 11/23/2014 19:22:14、削除、D:\ source\New Text Document.txt
### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "D:\source"
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true
### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
$action = { $path = $Event.SourceEventArgs.FullPath
$changeType = $Event.SourceEventArgs.ChangeType
$logline = "$(Get-Date), $changeType, $path"
Add-content "D:\log.txt" -value $logline
}
### DECIDE WHICH EVENTS SHOULD BE WATCHED
Register-ObjectEvent $watcher "Created" -Action $action
Register-ObjectEvent $watcher "Changed" -Action $action
Register-ObjectEvent $watcher "Deleted" -Action $action
Register-ObjectEvent $watcher "Renamed" -Action $action
while ($true) {sleep 5}
$watcher.Path = "D:\source"
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $true
StartMonitoring.ps1
という名前に変更します監視を停止するには、PowerShellウィンドウを閉じるだけで十分です。
あなたは正しい行にいるように見えます - あなたは定期的に.batまたは.cmdファイルを実行するためにタスクスケジューラを使うことができ、そのファイルは必要なファイルの存在をチェックするために行で始めることができます - 実際、私はファイルが存在しないことを確認します。例えば:
@ECHO OFF
REM Example file
IF NOT EXIST C:\SOMEWHERE\SUBFOLDER\THISFILE.THS EXIT 1
REM All this gets done if the file exists...
:
:
EXIT 0
このコードを変更して、ループ内で、たとえば1分遅れてループして実行し、Windowsのスタートアップフォルダにバッチファイルへの参照を追加することもできます。
@ECHO OFF
REM Example file
:LOOP
IF NOT EXIST C:\SOMEWHERE\SUBFOLDER\THISFILE.THS GOTO SKIP01
REM All this gets done if the file exists...
:
:
:SKIP01
REM Crafty 1 minute delay...
PING 1.1.1.1 -n 10 -w 6000 >NUL
GOTO LOOP
実行しているWindowsのバージョンや追加のリソースキットに応じて遅延を達成する方法は他にもありますが、PINGコマンドはほとんどの場合どのような状況でも機能します。上記のPINGコマンドでは、10個のファントムPINGSがそれらの間に6000ms(すなわち6秒)の遅延を持って実行されます、あなたはバッチファイルループ間に必要な遅延を達成するためにこれらの値で遊ぶことができます。
DropIt (無料)をご覧ください。プログラムはいくつかの自動化された方法で入ってくるファイルを処理するのに適しています。画像を変換したり、PDFを分割したりするために、他のコマンドラインプログラムにパラメータを移動、コピー、削除、および渡すことができます。
アクションが変更されたファイルをコピーするだけの場合は、robocopy/MONを使用できます。
RobocopyがFileSystemWatcherを使用するのか、それとも変更をポーリングすることで機能するのかわからない
または、 Watch 4 Folder を使用することもできます。どうやらそれはフリーウェアで、移植性があり、そしてWindows 7と互換性がある。私はそれを試していないが、ウェブ検索を通してそれを見つけて、そして私がそれを渡すと思った。
私もVBSスクリプトが好きで、このサイトにも掲載されています。
これを行うには、 http://www.myassays.com/folder-poll から市販のツール(無料ではない)Folder Pollを使用します。これは、簡単に設定できるようにするための使いやすいマネージャアプリケーションを含むWindowsアプリケーションです。また、XML構成オプションもあります。実際のフォルダポーリングはWindowsサービスとして実行されます(したがって、再起動のたびに自動的に開始されます)。ポーリングされたフォルダで新しいファイルが検出されると、アプリケーションを自動的に起動できます(独自のカスタムコマンドライン引数を指定できます)。ファイルのコピー/移動など他のこともできます。また、アクティビティはログファイルに記録することができ、他にも高度な操作があります。