我想知道是否有推荐的方法将文件从远程位置(大约100个远程站点)复制到本地系统(服务器具有高规格硬件)。请记住以下内容:
应用程序应该同时为这些远程位置执行数据复制,不应该逐个批量复制。
远程位置:“\ ip_address \ c $ \ folder \
如何使用批处理文件,Power shell或C#/ VB.NET?
如果我创建了100个批处理文件并使用可以在C#或VB.NET中调用这些批处理文件的工具来运行它们?它会起作用吗?
答案 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