2015-11-07 23 views
-4

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

  1. 应用程序应该执行数据在同一时间对那些远程地点复制,它不应该被一个是批量复制一个。

  2. 远程位置:“\ IP_ADDRESS \ C $ \文件夹\

  3. 当地旅游目的地系统: “E:\ DATA \”

如何做到这一点使用批处理文件,电源外壳或C#/ VB.NET?

如果我创建了一个100批文件并使用一个工具,可以调用C#或VB.NET这些批处理文件运行呢?它会不会起作用?

+0

你不能在同一时间从100个位置执行复制,直到你的硬件能够做到这一点。 –

+0

服务器有一个高规格&肯定可以做到这一点...但这里是一个程序的问题....就像如果我创建了100个批处理文件,并在某些时候运行它们通过一个vb.net工具,谈判到这些批次文件...它会有帮助吗? – Omran

+0

你可以很容易地尝试一个cmd脚本(.bat文件),该脚本在100个命令上启动了'START'。作业调度程序可能会做你想做的事。 https://sourceforge.net/projects/jobscheduler/ – lit

回答

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 
+0

这将启动我的100个工作在同一时间或一个接一个,当每个工作被执行,然后将继续下一个工作? – Omran

+0

它会依次启动100个作业(新的后台进程),但不会在开始下一个作业之前等待每个作业,所以根据作业需要多长时间,最终同时运行 –

+0

伟大:D这是我实际上需要....作为后台进程同时运行这100个工作,我会尝试它并恢复为回答:) – Omran

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 
相关问题