问题陈述:我正在尝试从源到目标目录复制100个文件(每个文件大小超过GB),我通过power-shell脚本自动执行此操作。执行脚本时,复制操作是按顺序复制文件。我们有什么方法可以并行复制它们以减少一些时间,因为它需要花费大量时间来复制所有文件并且限制使用任何第三方软件。
$DATAFileDir="D:\TEST_FOLDER\DATAFILESFX\*"
$LOGFileDir="D:\TEST_FOLDER\LOGFILESFX\*"
$DestDataDir="D:\TEST_FOLDER\Data\"
$DestLogDir="D:\TEST_FOLDER\Log\"
#Copying the Primary file
Copy-Item -Path $DATAFileDir -Destination $DestDataDir -Recurse -Force -Verbose
#Copying the Audit File
Copy-Item -Path $LOGFileDir -Destination $DestLogDir -Recurse -Force -Verbose
有什么建议吗?
您可以为要复制的每个文件启动作业单个进程。
$Source = Get-ChildItem -Path C:\SourceFolder -Recurse | Select -ExpandProperty FullName
$Destination = 'C:\DestinationFolder'
foreach ($Item in @($Source)){
#starting job for every item in source list
Start-Job -ScriptBlock {
param($Item,$Destination) #passing parameters for copy-item
#doing copy-item
Copy-Item -Path $Item -Destination $Destination -Recurse -Force
} -ArgumentList $Item,$Destination #passing parameters for copy-item
}
你应该能够用powershell workflow轻松实现这一目标。 throttlelimit将限制并行复制的文件数量。删除它以并行复制所有文件(可能不推荐用于100个文件)。
workflow copyfiles {
param($files)
foreach -parallel -throttlelimit 3 ($file in $files) {
Copy-Item -Path $file -Destination 'C:\destination\' -Force -verbose
}
}
$files = Get-ChildItem -Path C:\source -Recurse -File
copyfiles $files.FullName