한 폴더에서 다른 폴더로 특정 확장자를 가진 파일을 복사하기 위해 powershell 스크립트 작성


10

다음 매개 변수를 입력으로 얻는 powershell 스크립트를 작성하고 싶습니다.
복사 할 폴더, 확장명, 폴더를 복사 할 수 있으며 변경 사항이 IIS, 사용자 이름 및 암호를 다시 시작해야하는지 여부를 나타내는 부울입니다.
원격 서버로 복사하는 것을 고려할 때 어떤 cmdlet을 살펴 봐야합니까?
변수를 변수로 읽는 방법은 무엇입니까?
IIS를 어떻게 다시 시작합니까?

여러 폴더를 복사하려는 경우 powershell 스크립트를 호출하는 powershell 스크립트를 작성하려면 어떻게해야합니까?


와우, 답변이 늦어 져서 죄송합니다 ... 여전히 도움이 필요하십니까?
Marco Shaw

예, IIS를 다시 시작하는 방법을 모르겠습니다. 파일이 실제로 복사되도록하려면 어떻게해야합니까?
the_drow

답변:


22

Get-ChildItem파일 이름 필터를 재귀 적으로 포함하여 파일과 디렉토리를 나열 할 수 있습니다. Copy-Item파일을 복사 할 수 있습니다.

파일 선택과 관련하여 많은 부분이 겹치는 경우가 종종 Copy-Item있으며 , 필요한 세부 사항에 따라 자체적으로 충분합니다 (예 : 폴더 구조를 유지 하시겠습니까?).

모든 복사하려면 *.foo*.barStartFolder에서 DestFolder에를 :

Copy-Item -path "StartFolder" -include "*.foo","*.bar" -Destination "DestFolder"

폴더 구조를 유지해야하는 경우 대상 폴더 이름을 빌드해야하기 때문에 상황이 더 어려워집니다.

$sourcePath = 'C:\StartFolder'
$destPath = 'C:\DestFolder'

Get-ChildItem $sourcePath -Recurse -Include '*.foo', '*.bar' | Foreach-Object `
    {
        $destDir = Split-Path ($_.FullName -Replace [regex]::Escape($sourcePath), $destPath)
        if (!(Test-Path $destDir))
        {
            New-Item -ItemType directory $destDir | Out-Null
        }
        Copy-Item $_ -Destination $destDir
    }

그러나 robocopy더 쉬울 것입니다 :

robocopy StartFolder DestFolder *.foo *.bar /s

결국 선택하는 방법은 필요한 세부 사항에 달려 있습니다.

(위에서는 별명을 피하고 (예 : Copy-Item대신 copy) 매개 변수 이름이 위치에 있더라도 명시 적으로 사용합니다.)


2
나던 일, 나는 시도 : Copy-Item -path "C:\Users\username\Pictures\" -include "*.JPG", "*.PNG" -Destination "D:\"로와 -recurse없이 - 아무 일도 발생하지 않습니다
Carmageddon

6

IIS 부분을 다룰 수는 없지만 디렉토리 구조를 유지하면서 파일 사본이 다른 답변에 표시된 것보다 훨씬 간단 할 수 있습니다.

Copy-Item -path "StartFolder" -Recurse -Include "*.foo","*.bar" -Destination "DestFolder" -Container

-Container인수는 소스에서와 같이 대상의 구조를 복제하는 마법의 일부입니다.


이 작업을 수행 할 수 없습니다 -Include...없이 모든 것을 복사 할 수는 있습니다-Include
Ben Polinsky

1

나를 위해 일한 유일한 해결책은

Copy-Item -path 'c:\SourceFolder\*.foo' -destination 'c:\DestFolder'

-Include매개 변수 를 사용하는 다른 솔루션이 작동하지 않았습니다.


1

어떤 사람들은 여기에 언급 한 바와 같이 -Include은 작동하지 않습니다.

중첩 된 폴더로 작동하게하려면 'filter'+ 빈 폴더 삭제의 두 단계 접근 방식을 사용했습니다.

#copy with folder structure
Copy-Item -path $source -Recurse -Filter "*.foo" -Destination $destination -Container

#remove empty folders
dir $destination -Directory -Recurse |
    %{ $_.FullName} |
    sort -Descending |
    where { !@(ls -force $_) } |
    rm 

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.