Элемент копирования Powershell: имя файла изменяется - PullRequest
0 голосов
/ 11 февраля 2019

Я буду очень признателен за вашу любезную поддержку, поскольку это связано с уходом за пациентами и их конфиденциальностью.

Я пишу приведенный ниже сценарий для больницы, в которой медицинские изображения / видео пациента должны быть скопированы в другую папку дляцели архивирования.

Рабочий процесс: устройство сохраняет файл AVI & THB в папке с точно таким же именем, синтаксис для имени файла ID_DATE, например:

  • 123456_2112019.AVI
  • 123456_2112019.THB

Мой скрипт просматривает эту папку и копирует файл AVI только в другую папку.

Проблемаявляется то, что файл AVI копируется успешно, но имя обрезается, он удаляет все до подчеркивания, поэтому файл 123456_2112019.AVI становится _2112019.AVI

Я заметил, что файл THB являетсяосновной причиной этой проблемы, поскольку я тестировал другую папку без наличия файла THB и операция копирования прошла успешно без изменения имени.

Не могли бы выпосоветуйте пожалуйста как это исправить?вот мой код

$folder = 'D:\test'
$filter = '*.AVI'                             

$fsw = New-Object System.IO.FileSystemWatcher $folder, $filter -Property @{
    IncludeSubdirectories = $true              
    NotifyFilter          = [System.IO.NotifyFilters]'FileName, LastWrite'
}

$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {

    [int]$sleepTime = 500
    $path = $Event.SourceEventArgs.FullPath
    $name = $Event.SourceEventArgs.Name
    $changeType = $Event.SourceEventArgs.ChangeType
    $timeStamp = $Event.TimeGenerated
    Write-Host $path -fore Green
    Write-Host $name -fore Green
    Write-Host $changeType -fore Green
    Write-Host $timeStamp -fore Green

    try {
        # **********check if the file is locked by another process (still being received from the soource)********
        function Test-FileLock {
            param (
                [parameter(Mandatory = $true)][string]$Path
            )

            $oFile = New-Object System.IO.FileInfo $Path

            if ((Test-Path -Path $Path) -eq $false) {
                return $false
            }

            try {
                $oStream = $oFile.Open([System.IO.FileMode]::Open, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None)

                if ($oStream) {
                    $oStream.Close()
                }
                $false
            }
            catch {
                # file is locked by another process.

                return $true
            }
        }
        #******** End of Function (test if file is locked) *****************
        # below line : will keep testing if the file is locked ************
        while (Test-FileLock $path) { Start-Sleep 10 }

        # below line: once the file becomes "NOT Locked" , copy the file to the destination folder *******
        Copy-Item  $path  'D:\output' -Force -Verbose -PassThru 
    }
    catch {
        $error|Out-File  -FilePath d:\outlog.txt -Append
        $Error.Clear()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...