bugfix> powershell > 投稿

私は IO.FIleSystemWatcher を使い始めたばかりです 。私の現在のコードは動作し、目的の場所に作成されたファイルがあることを警告しますが、いくつかの変数をパイプで送り、文字列を分割したいと思います。分割部分が機能しません。

機能コード:

$folder = 'D:\Output'
$filter = '*.jpg'
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}
Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
Write-Host "The file '$name' was $changeType at $timeStamp" -fore green
Out-File D:\Output\scans\$name.txt    
}

$name 'file.name.fn_xxx.jpg'のように常にフォーマットされ、 split を使用したい $name から「ファイル」を取得する 、 例えば:

$name.split('.')[0]

しかし、これは私が知る限りでは何もしません。たとえば、 $name でファイルを出力できますファイル名としてですが、最初に分割しようとしても何も出力されません。

非機能コード:

Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
Write-Host "The file '$name' was $changeType at $timeStamp" -fore green
$name = $name.split('.')[0]    
Out-File D:\Output\scans\$name.txt    
}

これは少し頭に浮かぶので、アドバイスや提案は歓迎します。

ありがとう

回答 1 件
  • 私は別の変数を使用するだけでそれを解決しました。

    $folder = 'D:\Output'
    $filter = '*.jpg'
    $fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}
    Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
    $name = $Event.SourceEventArgs.Name
    $changeType = $Event.SourceEventArgs.ChangeType
    $timeStamp = $Event.TimeGenerated
    Write-Host "The file '$name' was $changeType at $timeStamp" -fore green
    Write-Host "$name"
    $x = $name.split(".")[0]
    Out-File D:\Output\scans\$x.txt
    
    

    なぜこれが機能するのかわかりませんが、機能します。誰かが理由を知っているならコメントしてください!

あなたの答え