2017-02-22 4 views
0

Beim Ausführen eines Befehls zum Kopieren von Dateien von der Quelle zum Ziel mit Powershell, stieß ich auf das Problem, wie nur Dateien kopiert werden, auf denen keine Operation ausgeführt wird?Dateien kopieren, die vollständig sind?

Wenn 3 Dateien A/B/C vorhanden sind, wird immer noch auf A protokolliert, während B und C abgeschlossen sind. Ich möchte nur B und C mit Powershell kopieren.

Alle Ideen werden hilfreich sein.

+0

Dies sollten Sie Dateien identifizieren lassen, wenn von einem anderen Prozess verwendet wird. http://stackoverflow.com/a/9411199/5212566 –

Antwort

0

Hier ist etwas, das Sie mit beginnen können:

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 } 
Verwandte Themen