2017-02-22 7 views
0

Выполняя команду для копирования файлов из источника в пункт назначения с помощью powershell, я столкнулся с проблемой копирования только файлов, которые не работают на них.Скопируйте файлы, которые заполнены?

Если есть 3 файла A/B/C, запись все еще происходит на A, а B и C завершены. Я только хочу скопировать B и C с помощью powershell.

Любые идеи будут полезны.

+0

Это должно позволить вам идентифицировать файлы, если он используется другим процессом. http://stackoverflow.com/a/9411199/5212566 –

ответ

0

Вот то, что вы можете начать с:

function Test-FileNotInUse 
{ 
    [cmdletbinding()] 
    param(
     [parameter(Position = 0, Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] [Alias('FullName')] [string] $filePath 
    ) 

    process { 

     $inUse = $false 

     try { 
      $fileInfo = New-Object System.IO.FileInfo $filePath 
      $fileStream = $fileInfo.Open([System.IO.FileMode]::OpenOrCreate, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None) 

      if ($fileStream) { 
       $fileStream.Close() 
      } 
     } 

     catch { 
      $inUse = $true 
     } 

     if (!$inUse) { 
      Write-Output $filePath 
     } 
    } 
} 


$source = "C:\source" 
$destination = "C:\destination" 

dir $source -recurse | Test-FileNotInUse | %{ copy $_ $destination }