Das folgende PowerShell-Skript sollte das tun, was Sie möchten.
Ändern Sie die ersten drei Variablen entsprechend Ihrer Umgebung.
## Q:\Test\2018\06\28\SU_1334840.ps1 #Requires -Version 3 # get files to copy from file in same foler $FileList = Get-Content '.\FileList.txt' $BaseSrc = 'X:\Source\path\' $BaseDst = 'Y:\Destination\path\' ForEach ($File in $FileList){ ForEach ($Find in (Get-ChildItem $BaseSrc$File -File -Recurse)) { $DestFile = Join-Path $BaseDst ($Find.FullName.Replace($BaseSrc,'') ) $DestDir = Split-Path $DestFile If (!(Test-Path $DestDir)){ MD $DestDir |Out-Null} # "Copying to " -f $Find.FullName,$DestFile Copy-Item $Find.FullName $DestFile } }
Um zu sehen, was passiert, während das Skript funktioniert, entfernen Sie das #
Vorherige"Copying...
Für das Skript ist mindestens PowerShell Version 3 erforderlich
Je nach Größe Ihrer Liste / Anzahl der Dateien und Unterverzeichnisse in Ihrem Quellbaum kann diese Vorgehensweise etwas schneller sein.
## Q:\Test\2018\06\28\SU_1334840_2.ps1 #Requires -Version 3 # get files to copy from file in same foler $FileList = Get-Content '.\FileList.txt' $BaseSrc = 'X:\Source\path\' $BaseDst = 'Y:\Destination\path\' ForEach ($File in (Get-ChildItem $BaseSrc -File -Recurse)) { If ($File.Name -in $FileList) { $DestFile = Join-Path $BaseDst ($File.FullName.Replace($BaseSrc,'') ) $DestDir = Split-Path $DestFile If (!(Test-Path $DestDir)){ MD $DestDir |Out-Null} "Copying to " -f $File.FullName,$DestFile Copy-Item $File.FullName $DestFile } }
Beispielausgabe:
> . Q:\Test\2018\06\28\SU_1334840.ps1 Copying C:\sys\7z.dll to A:\Test\sys\7z.dll Copying C:\sys\7z.exe to A:\Test\sys\7z.exe Copying C:\sys\ClipBoard.exe to A:\Test\sys\ClipBoard.exe Copying C:\sys\ClipBoard.txt to A:\Test\sys\ClipBoard.txt Copying C:\sys\DUMPHEX.EXE to A:\Test\sys\DUMPHEX.EXE