0

そこに座って、ファイルがフォルダーに追加されるのを待つスクリプトを作成しようとしています。検出された場合は、それらを別のフォルダーに移動します。

以下に示すようなコードの記事がオンラインにかなりありますが、一度に複数のファイルをフォルダーに入れると、これらの記事はどれも機能しないようです。

$folder = "d:\Logs\temp"
$filter = "*.xml"                           # <-- set this according to your requirements
$destination = "d:\Logs\XML\"
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
 IncludeSubdirectories = $false       # <-- set this according to your requirements
 NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}
$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
 $path = $Event.SourceEventArgs.FullPath
 $name = $Event.SourceEventArgs.Name
 $changeType = $Event.SourceEventArgs.ChangeType
 $timeStamp = $Event.TimeGenerated
 Write-Host "The file '$name' was $changeType at $timeStamp"
 Move-Item $path -Destination $destination -Force -Verbose # Force will overwrite files with same name
}

機能しないだけでなく、完全に行き詰まっているようです。これをどのように行うことができるか、誰にもアイデアがありますか? 私の場合、XML ファイルのバッチ全体が一度にフォルダーに置かれ、順番に処理する必要があります。

ありがとう!

4

3 に答える 3

0

あなたのコードは正しいです。最後の行以外は、あなたが書いた唯一のものと思われるので、そこから始めましょう。 Move-Item $path -Destination $destination -Force -Verbose # Force will overwrite files with same name そして目的地$destination = "d:\Logs\XML\"

文字通り、アイテムのコピー/移動は、コピー元のフルパスとコピー先のフルパスを受け取ります。フォルダーlogs/xmlにコピーしようとしていますが、文字通りsrcをフォルダー「logs」内のファイル「xml」にコピーしています

概念を理解していただければ幸いです。よくわからない場合は、これを使用してください... join-path $destination $nameアイテムを移動する前に

PS ..これは完全に行き詰まったものです。ご存知かもしれませんが、多くのプログラミング言語とは異なり、スクリプトは実行時に行ごとにコンパイルされるため、通常、powershell スクリプトではエラーが発生して完全に先に進む可能性があります。私の経験では、バックグラウンド プロセスとして実行されるイベントとして powershell を使用しても、この動作は維持されません。

私が見つけたその問題の唯一の修正は、エラーチェックです。コピーする前に、ファイルがそこにあることを確認してください。コピーする前に、フォルダーがそこにあることを確認してください...さらに悪いことに、登録イベントからコードを取り出し、テストして赤いテキストが生成されないことを確認してください。

于 2013-07-08T18:23:25.107 に答える
0

これは現在機能しています。問題は、変数の一部を、インポートされた構成ファイルであり、問​​題を引き起こしている配列オブジェクトへの参照に置き換えたことだと思います。

于 2013-07-11T10:07:42.413 に答える
0

このようなことを行うための簡単なオプションは、PowerShell スクリプトを 3 ~ 5 分ごとに実行するスケジュールされたタスクを設定することです。呼び出すことができるスクリプトは、次のような単純なものになります。

$folder = "d:\Logs\temp"
$destination = "d:\Logs\XML\"
$filter = "*.xml"
Move-Item  ($folder+"\"+$filter) $destination -force 

$filterこれにより、最初から一致するファイルのみが移動さ$folderれ、それらすべてが$desinationフォルダーに配置されます。

http://windows.microsoft.com/en-GB/windows7/schedule-a-task

于 2013-07-08T15:46:59.830 に答える