通过power-shell并行复制多个文件而不使用任何第三方软件?

问题描述 投票:0回答:2

问题陈述:我正在尝试从源到目标目录复制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

有什么建议吗?

powershell
2个回答
0
投票

您可以为要复制的每个文件启动作业单个进程。

$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 
}

0
投票

你应该能够用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
© www.soinside.com 2019 - 2024. All rights reserved.