2016-04-26 197 views
1

所以我發現xcopy對複製整個文件夾結構非常有幫助。但我也需要將特定文件夾的內容複製到新目錄中。複製特定文件夾的文件夾結構和內容

例如:

1. C:\OriginalDir 
- \This 
    * \Test 
- \That 
    * \Test 
- \Other 

我可以使用:xcopy C:\OriginalDir C:\TempDir /e /t複製C:\OriginalDir的整個結構。但是,我也需要將\Test文件夾的內容複製到新目錄中。我對xcopy相當陌生,而且我也研究過robocopy。有沒有辦法做到這一點?我試圖在PowerShell中實現這一點,並考慮迭代文件夾結構,但是當我最終到達Test文件夾時仍然不存儲父文件夾結構。

謝謝。

回答

1

感謝Steve讓我開始並讓我正確地思考這個問題。無需使用RoboCopy或Xcopy手動完成腳本編寫,因爲我無法讓它們按照我想要的方式工作。

$target = "C:\\TestTemp" 
foreach($item in (Get-ChildItem "C:\\OriginalDir\\This" -Recurse)){ 

    if ($item.PSIsContainer -and ($item.Name -eq "obj" -or $item.Name -eq "bin")){ 
     $tempPath = $target 
     $path = $item.FullName 
     $trimmed = $path.TrimStart("C:\\OriginalDir") 
     $pieces = $trimmed.Split("\\"); 

     foreach($piece in $pieces){ 

      $tempPath = "$tempPath\$piece" 
      New-Item -ItemType Directory -Force -Path "$tempPath" 
      if($piece -eq "Test" -or $piece -eq "Temp"){ 
      Copy-Item -path $path\** -Destination $tempPath -Recurse -force 
      } 
     } 
    } 
} 
2

你試過ROBOCOPY - 例如:

$source = "C:\Your\Source\Directory" 
$dest = "C:\Your\Destination\Directory" 
robocopy $source $dest /e 

的 'E' 開關將複製子目錄及其內容(包括空的子目錄)。

如果你想排除\其它目錄(這不是從你的問題完全清楚),你可以做到以下幾點:

robocopy $source $dest /e /xf * 

(這只是複製的目錄中沒有文件複製結構)
robocopy $source $dest /XD C:\Other /e 

(這將文件複製,但不包括命名的目錄)

你可以在這裏找到更多的信息:

https://technet.microsoft.com/en-GB/library/cc733145.aspx

編輯:

爲了只複製與「測試」開頭的目錄,你可以做到以下幾點:

$exclude = gci C:\OriginalDir -ad | ?{ $_.Name -notlike 'Test*' 
    robocopy $source $dest /XD $exclude /e 

如果你的文件夾結構是多個級別deept,您可以使用Get-Childitem上的-recurse開關

+0

因此,例如,讓我們假設我有15個文件夾。我需要複製標有「測試」及其內容的所有目錄。我需要能夠將這些特定內容複製到具有正確目錄結構的新位置,而不需要其他任何內容。排除選項很好,但不是我所需要的,因爲我必須排除大量目錄,並且目錄會隨着時間而改變,所以我不能只是硬編碼它們。 – ace

+0

我已經更新了我的答案,僅包含標有'test'的目錄。 – Steve

相關問題