拡張子が.csvの新しいファイルを作成するフォルダを監視するPowerShellスクリプトのサポートが必要です。
新規ファイルの作成は、次のアクションが行わ検出され ...ファイルのSystem.IO.FileSystemWatcherを使用した後でPowershellでファイルをループする
- 詳細は、ファイルのコピーが1_ToBeProcessed \」という名前の別のフォルダに送信されるログファイル
- に送られ、 MyImport.csv」(ファイルを注意してくださいMyImport.csvに変更されます)
- ファイルがディレクトリに移動し、 『(元のファイル名で)\ MYSERVER \ MyCompanyの\ MYFOLDER \ MyHistory』
- 式がに呼び出されます"\ MYSERVER \ MYCOMPANY \ MYFOLDER \ 1_ToBeProcessed"にあるファイルを取得してimporを実行する.batファイルを実行しますファイルをアプリケーションに挿入します。
- スクリプトは60秒間スリープして、次のファイルを処理する前にインポートが完了できるようにします。 このスクリプトは、スクリプトの実行中に別のファイルが作成されない限りうまくいきます。
同じタイプの複数のファイルが同時にウォッチフォルダにヒットすることがあります。したがって、スクリプトは5つのファイルをループしていて、次に別のファイルがディレクトリに入る可能性があります。それが起きると、スクリプトがやり直され、ファイルをループし始めているように見えますが、同じファイルを何度も繰り返してループし続けます。 私は、このスクリプトで間違っていることについて、誰かが私に正しい方向を向けることを期待しています。新しいファイルが追加されたため、現在のループで作業中のファイルを完成させてから再開するにはどうすればよいですか? ご提供いただけるお手伝いをさせていただきますようお願い申し上げます。
これは私が現在持っているものです...私は、彼らが作成されると、むしろファイルを処理、ループしないことをお勧めしたい
#Define watcher; Set path to watch; Set filter on file type
$filewatcher = New-Object System.IO.FileSystemWatcher
$filewatcher.Path = "\\MYSERVER\MYCOMPANY\MYFOLDER"
$filewatcher.Filter = "*.csv"
#Define "move to" and "copy to" paths
$moveTo = "\\MYSERVER\MYCOMPANY\MYFOLDER\MyHistory"
$copyTo = "\\MYSERVER\MYCOMPANY\MYFOLDER\1_ToBeProcessed\MyImport.csv"
#Define actions after an Event is Detected
$action = {$files = Get-ChildItem -Path $filewatcher.Path -Filter filewatcher.Filter
foreach ($file in $files)
{
#Define variables for log file
$changeType = $Event.SourceEventArgs.ChangeType
$logline = "$(Get-Date), $changeType, $file"
#Actions to take
Add-Content "\\MYSERVER\MYCOMPANY\MYFOLDER\3_Log\MyImportLog.txt" -value $logline
Copy-Item $file.FullName -Destination $copyTo
Move-Item $file.FullName -Destination $moveTo -Force
Invoke-Expression "& '\\MYSERVER\MYCOMPANY\MYFOLDER\4_Scripts\PSscriptToRunBATfile.ps1'"
#Pause the script for 60 seconds to allow it to finish posting the import before going to the next record
Start-Sleep -Seconds 60
}
}
#Decide which events should be watched and set check frequency
$onCreated = Register-ObjectEvent -InputObject $filewatcher -EventName "Created" -SourceIdentifier FileCreated -Action $action
感謝を!遅れた応答のために申し訳ありません...胃のバグを得ました!もともと私が解決策を研究していた時、私はBigTeddyのポストを走りました。私はPowershellを初めて使っていて、まだ学習しています。最終的に、私はそれが私が学び、理解したプロセスだったので、ループして行きました。私は日時順に行きたいと思っていましたが、私はそれをどうやって脳を包んでいませんでした。私は戻ってこれをもう少し調べて、私がそれを私のために働かせることができるかどうかを見ます。ありがとうございました! – mdgaw
問題はありません、@ mdgaw、答えとしてマークするか、またはアップヴォートしてください。 – TechSpud