将数据从100个位置同时复制到本地系统

时间:2015-11-07 12:32:40

标签: c# vb.net powershell batch-file copy

我想知道是否有推荐的方法将文件从远程位置(大约100个远程站点)复制到本地系统(服务器具有高规格硬件)。请记住以下内容:

  1. 应用程序应该同时为这些远程位置执行数据复制,不应该逐个批量复制。

  2. 远程位置:“\ ip_address \ c $ \ folder \

  3. 本地目的地系统:“E:\ Data \”
  4. 如何使用批处理文件,Power shell或C#/ VB.NET?

    如果我创建了100个批处理文件并使用可以在C#或VB.NET中调用这些批处理文件的工具来运行它们?它会起作用吗?

2 个答案:

答案 0 :(得分:0)

你可以开始做一百个工作:

# Create a scriptblock that does what you need
$CopyCode = {
    # accept a computer name parameter
    param($ComputerName)
    try{
        $FilesCopied = Copy-Item -Path "\\$ComputerName\c$\folder\*" -Destination "E:\Data" -PassThru
    } catch {
        # error logging in here
    }
    # log $FilesCopied
}

# Gather remote computer names or IPs in an array, you could do this from AD or from a file
$RemoteComputers = "10.0.0.1","10.0.0.2","10.0.0.3","10.0.0.4"

# foreach remote machine, start a copy job
$Jobs = foreach($Computer in $RemoteComputers){
    Start-Job -ScriptBlock $CopyCode -ArgumentList $Computer
}

# wait for all jobs to finish
Wait-Job -Job $Jobs

答案 1 :(得分:0)

这里可能有一些你可以使用的东西。 copy100.txt文件是所有主机/ IP地址和要复制的文件名的列表。

C:\Users\pwatson\t\copy100>type copy100.txt
localhost,Users\pwatson\t\bt\file1.txt
localhost,Users\pwatson\t\bt\file2.txt
localhost,Users\pwatson\t\bt\file3.txt

该脚本为每个要复制的文件编写脚本,并将脚本写入START所有文件。

C:\Users\pwatson\t\copy100>type copy100.bat
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET /A BCOUNT=0
SET BASE_FILENAME=%TEMP%\copy100_%RANDOM%

SET DOIT_FILENAME=%BASE_FILENAME%_doit.bat
IF EXIST "%DOIT_FILENAME%" (DEL "%DOIT_FILENAME%")

SET TARGET_DIR=.

ECHO>>"%DOIT_FILENAME%" @ECHO OFF
ECHO>>"%DOIT_FILENAME%" (

FOR /F "usebackq tokens=1,2 delims=," %%h IN (`TYPE copy100.txt`) DO (
    SET BATNAME=%BASE_FILENAME%_!BCOUNT!.bat
    IF EXIST "!BATNAME!" (DEL "!BATNAME!")

    ECHO>>"!BATNAME!" @ECHO OFF
    ECHO>>"!BATNAME!" COPY "\\%%h\C$\%%i" "%TARGET_DIR%"
    ECHO>>"!BATNAME!" EXIT

    ECHO>>"%DOIT_FILENAME%" START "Copy from %%h" /MIN "!BATNAME!"

    SET /A BCOUNT=!BCOUNT!+1
)

ECHO>>"%DOIT_FILENAME%" ) ^| SET /P "="
ECHO>>"%DOIT_FILENAME%" EXIT

(
    START "copy100 doit.bat" /MIN "%DOIT_FILENAME%"
) | SET /P "="

IF EXIST "%DOIT_FILENAME%" (DEL "%DOIT_FILENAME%")
IF EXIST "%BASE_FILENAME%*" (DEL "%BASE_FILENAME%*")
ECHO /B