2014-08-28 5 views
2

죄송 합니다만 이것이 정말 간단한 과정입니다.Noob에서 PowerShell로 폴더 내의 파일 복사

루트 수준 (비어 있음)에서 4,000 개의 디렉토리가있는 폴더 구조와 데이터가있는 다른 폴더 세트가있는 다른 위치가 있습니다.

location2의 폴더에서 \ FolderABC123 \ Archive와 같은 위치 1의 폴더로 파일을 복사하려고합니다. 단, 디렉토리 이름이 일치하는 경우에만하십시오. Windows 탐색기 복사 또는 xcopy 또는 다른 유틸리티를 사용하면 더 쉽게 수행 할 수 있지만 PowerShell에 머리를 넣어 좋은 시작이라고 생각하십니까?

감사합니다. Chris

+0

지금까지 무엇을 했습니까? Patrick에게 감사의 말을 전하십시오. – Nabin

답변

0
# Fist, get a list of all target directories (i.e.: directories under $destination that have a match in $source) 

    $targetDirs = dir -Path $source -Recurse -Force | 
     ?{ $_.psIsContainer } | 
     %{ $_.FullName -replace [regex]::Escape($source), $destination } | 
     %{ if (Test-Path $_) { $_ }} 

    # Then, enumerate all files from source and copy them only if the corresponding target dir exists 

    dir -Path $source -Recurse -Force | 
     ?{ -not $_.psIsContainer } | 
     ?{ Test-Path (Split-Path ($_.FullName -replace [regex]::Escape($source), $destination) -Parent) } | 
     copy -Force -Destination { $_.FullName -replace [regex]::Escape($source), $destination } 
+0

도움 주셔서 감사합니다. 많은 감사를드립니다. 오늘 그것을 줄 것이다. – jembsb

+0

데이비드, 당신의 충고에 감사 드리며, 나는 이것을 작동시킬 수있었습니다! 이 단계를 더 진행하려면 대상 폴더에 하위 폴더가 있습니다. 항목을 복사 할 폴더로 어떻게 선택할 수 있습니까? 어떻게 로그/csv 파일을 작성하여 무엇을 어디에 기록했는지 기록 할 수 있습니까? – jembsb

0

powershell을 사용할 수 있습니다.
처음에 경로를 설정하십시오.

$strSouce = "Path" 
$strDestination = "Path" 

그런 다음 소스에서 foreach 파일을 검색하십시오.

Foreach ($objFile in Get-ChildItem -Path $strSouce -Recurse | Where-Object -FilterScript {$_.PsIsCointainer -eq $false}) {] 

모든 항목을 출발지에서 목적지로 복사하십시오. 대상의 경우 대상 경로를 대상 경로로 바꿔야합니다. 학습에 대한


Copy-Item -Path $objFile.FullName -Destination $objFile.FullName.Replace("$strSouce", "$strDestination") 

은 올바른 위치에 조각을 설정합니다.

+0

이 코드를 작동시키는 데 어려움이있었습니다. 내가 발견 한 몇 가지 오타를 제외하고는, 나는 여전히 그것을 얻을 수 없었다. 결국 오류없이 진행되었지만 사본을 얻을 수 없었습니다. $ objFile 변수는 항상 비어있는 것처럼 보입니까? – jembsb

관련 문제