2014-06-10 4 views
0

Powershell에 대한 지식 부족에 대해 사과드립니다. 언어에 매우 익숙하지 않습니다. 특정 경로에있는 일부 파일을 다른 유사한 경로로 복사해야합니다. 등Powershell 경로에있는 다양한 폴더의 파일 복사.

C:\TEMP\Users\<username1>\Documents\<varyingfoldername>\* 
C:\TEMP\Users\<username2>\Documents\<varyingfoldername>\* 
C:\TEMP\Users\<username3>\Documents\<varyingfoldername>\* 
C:\TEMP\Users\<username4>\Documents\<varyingfoldername>\* 

....

그래서 기본적으로 경로 일 개 필요가있는 모든 파일과 디렉토리에 복사 할

C:\Files\Users\<username1>\Documents\<varyingfoldername>\* 
C:\Files\Users\<username2>\Documents\<varyingfoldername>\* 
C:\Files\Users\<username3>\Documents\<varyingfoldername>\* 
C:\Files\Users\<username4>\Documents\<varyingfoldername>\* 

등 ....에 예를 들면 다음과 같습니다 다른 경로들 각각에 대한 제 2 경로. 알려진 상수는 C : \ TEMP \ Users ......와 같은 경로의 첫 번째 부분이며 C : \ Files \ Users와 같은 대상의 첫 번째 부분 .....

사용하여 모든 다른 경로와 파일

gci C:\TEMP\[a-z]*\Documents\[a-z]*\ 

하지만 그때 복사본을 수행 할 때 내가 그들을 사용할 수 있도록 와일드 카드에있는 무엇을 전달하는 방법을 모르겠습니다. 어떤 도움을 주시면 감사하겠습니다.

+0

왜 그냥'복사 품목 -Recurse C : \ 임시 \ 사용자를 \ \ Documents C : \ Files \ Users \ '? 대상이 비어 ​​있지 않고 항목을 덮어 쓰려면'-Force' 스위치를 추가해야 할 수도 있습니다. –

답변

2

이 작동합니다 :

Get-ChildItem "C:\TEMP\*\Documents\*" | ForEach-Object { 
    $old = $_.FullName 
    $new = $_.FullName.Replace("C:\TEMP\Users\","C:\Files\Users\") 
    Move-Item $old $new 
    } 

을 추가 복잡성를 들어 폴더 수준을 일치,이 같은 작업을해야합니다 :

Get-ChildItem "C:\TEMP\*\Documents\*" -File | ForEach-Object { 
    $old = $_.FullName 

    $pathArray = $old.Split("\") # Splits the path into an array 
    $new = [system.String]::Join("\", $pathArray[0..1]) # Creates a starting point, in this case C:\Temp 
    $new += "\" + $pathArray[4] # Appends another folder level, you can change the index to match the folder you're after 
    $new += "\" + $pathArray[6] # You can repeat this line to keep matching different folders 

    Copy-Item -Recurse -Force $old $new 
    } 
+0

답장을 보내 주셔서 대단히 감사합니다. 이것은 꽤 잘 돌아 왔지만 목적지에 와일드 카드가있을 것이라는 점을 원래의 게시물에서 분명히했는지 확신 할 수 없습니다. C : \ program \ users \ $ domain $ \ $ username $ \ files \ $ username $ \ $ programfoldername $ \ *. *에있는 파일을 C : \ program에 복사하도록합니다. \ users \ $ domainfromsourcepath $ \ $ username from sourcepath $ \ *. *. 당신이 볼 수 있듯이 나는 그것보다 더 복잡하게 보였다. 복사 할 경로에 경로 와일드 카드를 전달하는 방법이 필요합니다. 다시 여기에 도움을 주셔서 감사 드리며 더 분명하지 않으신 것에 대해 유감스럽게 생각합니다. – user3724149

+0

다시 한번 감사드립니다. 나는 이것을 시도해 보았다. 표현식은 파이프 라인의 첫 번째 요소로만 허용된다. C : \ FileCopy2.ps1 : 6 char : 124 + $ new + = "\"| ($ pathArray [3]) # 다른 폴더 레벨을 추가하면 인덱스가 인 <<<< 이후의 폴더와 일치하도록 변경할 수 있습니다. – user3724149

+0

와우, 주요 오타. 그것들은 + | 안된다. 고정 ... –

관련 문제