Powershell从不同目录复制文件

Powershell copy files from different directories

我有一个脚本可以将文件从一台服务器复制到另一台服务器。 我基本上有 3 个不同的服务器位置,我想从中复制并在另一台服务器上创建一个文件夹,用于源中的每个位置及其中的内容。 我做到了,但是我为每个来源和每个 folder/destination 声明了一个变量。 我想创建一个变量,它应该自动获取源的每个位置,并将所有内容复制到正确的位置。 定义 $server= "\path1 , \path2, \path3 " 会这样做并且它会进入 foreach 循环吗?遍历路径的每一部分并复制和粘贴? 如果是这样,如果我有 1 个文件夹和 3 个子文件夹,每个文件夹对应一个源,我该如何定义目标。 例如 \path1 应该总是把项目放在 path1destination 中,\path2 应该总是把项目放在 path2destination 等等。基本上,我想以某种方式将每个源路径关联起来,使其具有特定的路径目标,并且所有内容都应使用尽可能少的变量。

任何人都可以提供有关如何解决此问题的想法?我的代码可以工作,但我必须定义 $path1 、 $path2 、 $path3 等等,然后对每个代码进行循环,这很好,但我需要让它更干净,代码行更少。



$server1 = "C:\Users\nicolae.calimanu\Documents\B\"
$server2 = "C:\Users\nicolae.calimanu\Documents\A\"  # UNC Path. 
$datetime = Get-Date -Format "MMddyyyy-HHmmss"
$server3 = "C:\Users\nicolae.calimanu\Documents\C\" # UNC Path. 
foreach ($server1 in gci $server1  -recurse)
{ 
  Copy-Item -Path $server1.FullName -Destination $server2
}

ForEach ( $server2 in $server2 ) {
 $curDateTime = Get-Date -Format yyyyMMdd-HHmmss
 Get-ChildItem $server2  -Recurse | 
 Rename-Item -NewName {$_.Basename + '_' + $curDateTime + $_.Extension }
}

foreach ($server2 in gci $server2 -Recurse)
{ 
  Move-Item -path $server2 -destination "C:\Users\nicolae.calimanu\Documents\C"
}

使用哈希表为每个源和目标创建键值存储。像这样,

# Create entries for each source and destination
$ht = @{}
$o = new-object PSObject -property @{ 
    from = "\serverA\source"
    to = "\serverB\destination" }
$ht.Add($o.from, $o) 

$o = new-object PSObject -property @{ 
    from = "\serverC\source"
    to = "\serverB\destination2" }
$ht.Add($o.from, $o) 

$o = new-object PSObject -property @{ 
    from = "\servera\source2"
    to = "\serverC\destination" }
$ht.Add($o.from, $o) 

# Iterate the collection. For demo, print the copy commands
foreach($server in $ht.keys) { $cmd = $("copy-item {0} {1}" -f $ht.Item($server).from, $ht.Item($server).to); $cmd }

# Sample output
copy-item \serverA\source \serverB\destination
copy-item \servera\source2 \serverC\destination
copy-item \serverC\source \serverB\destination2