Я буду очень признателен за вашу любезную поддержку, поскольку это связано с уходом за пациентами и их конфиденциальностью.
Я пишу приведенный ниже сценарий для больницы, в которой медицинские изображения / видео пациента должны быть скопированы в другую папку дляцели архивирования.
Рабочий процесс: устройство сохраняет файл 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()
}
}