programing

PowerShell을 사용하여 파일이 없는 폴더, 폴더가 없는 파일 또는 모든 폴더 복사

jooyons 2023. 8. 23. 21:46
반응형

PowerShell을 사용하여 파일이 없는 폴더, 폴더가 없는 파일 또는 모든 폴더 복사

폴더(또는 폴더 집합)를 사용하는 PowerShell 스크립트를 작성하고 폴더 구조(파일 없음)를 생성할 수 있는 폴더 구조(폴더 없음)를 생성할 수 있는 파일 구조(폴더 없음) 또는 파일(모두 또는 선택한 파일)과 폴더를 모두 생성할 수 있는 폴더 구조를 복제할 수 있으면 합니다.

    Example:

    C:\ProdData has 3 subfolders in it
    C:\ProdData\Fld1
    C:\ProdData\Fld2
    C:\ProdData\Fld3 - has 2 subfolders under it
    C:\ProdData\Fld3\MyFolder1
    C:\ProdData\Fld3\MyFolder2

위의 각 폴더에는 다양한 크기의 다양한 파일 확장자가 있습니다.

폴더 구조만, 파일또는 복사할 파일 및 폴더를 선택할 수 있도록 해당 폴더 구조를 다른 곳에서 복제하는 PowerShell 스크립트를 원합니다.

위에서 C:\ProdData를 다른 폴더에 복사하여 ProdData를 TestData(즉, C:\ProdData를 C:로 복사)로 이름을 변경할 수 있습니다.\TestData) 또는 전체 폴더 구조를 복사합니다.

C:\ProdData다른 항목의 하위 폴더인 다른 폴더로 이동: , 등...

선택적으로 폴더, 파일 또는 둘 다 포함하도록 선택합니다.

이상적인 솔루션은 폴더 구조를 가져와서 내보내고 저장한 후 읽어 들여 다른 곳에 동일한 구조를 만드는 것입니다.제가 찾은 일부 솔루션은 폴더 구조만 복사했다고 했지만, 데이터가 있는 경우 해당 폴더 구조도 복사되므로 둘 중 하나를 제외할 수 없습니다.경로를 반보존하는 파일 전용 요구사항에 대한 부분적인 해결책이 있지만 파일이 필요합니다.

c:\ProdData\Fld1\MyFile.dat

복사 위치:

c:\TestData\yyyyMMdd_hhmmss_ProdData_Fld1_MyFile.dat

하지만 그것은 쉽게 해독될 수 있는 것이 아니며 소스 구조를 다시 통합하는 것은 불가능할 것입니다.어떻게 하면 바퀴를 다시 발명하지 않고 이를 달성할 수 있을지에 대한 생각을 해주시면 감사하겠습니다.

폴더 계층의 모든 항목을 복사하려면 다음과 같이 하십시오.

Copy-Item $source $dest -Recurse -Force

계층을 복사하려면 다음을 수행합니다.

$source = "C:\ProdData"
$dest = "C:\TestData"
Copy-Item $source $dest -Filter {PSIsContainer} -Recurse -Force

파일 구조를 평평하게 하려면 다음을 수행합니다.

$source = "C:\ProdData"
$dest = "C:\TestData"
New-Item $dest -type directory
Get-ChildItem $source -Recurse | `
    Where-Object { $_.PSIsContainer -eq $False } | `
    ForEach-Object {Copy-Item -Path $_.Fullname -Destination $dest -Force} 

행운을 빕니다.

다음은 설명한 각 상황을 처리하기 위한 몇 가지 아이디어입니다.

폴더 구조만

이렇게 하면 소스가 대상에 복사되고 하위 디렉터리가 반복되지만 모든 파일은 제외됩니다.

robocopy $source $dest /e /xf *.*

파일만(플랫텐 구조)

이것을 처리하는 방법은 몇 가지가 있지만, 특별히 좋거나 우아한 방법은 모르겠습니다.각 하위 디렉토리에 대해 루트 대상 폴더에 대한 비재귀적 복사본을 실행하는 어색하지만 효과적인 접근 방식이 있습니다.비판이나 더 나은 대안이 가장 환영받을 것입니다.

Get-ChildItem $source -Recurse |
  Where-Object { $_.PSIsContainer -eq $true } |
  Foreach-Object { robocopy $_.FullName $dest }

전부다.

이 시나리오는 그 중에서 가장 간단합니다.

robocopy $source $dest /e

직접 해 볼 수 ( ).robocopy /?프로세스를 미세 조정합니다.제 생각에 가장 까다로운 시나리오는 디렉터리 구조를 평평하게 만드는 것입니다.여러 디렉터리에 나타나는 동일한 파일 이름을 처리하는 방법과 같은 몇 가지 결정을 내릴 수 있습니다.

명령줄에서 옵션을 수락하는 방법에 대해서는 Powershell 매개 변수 세트를 세 가지 상황에 함께 사용할 것을 제안합니다.개념에 대해 논의하는 블로그 게시물이 여러 개 있지만 TechNet을 보거나 실행할 수도 있습니다.help about_Functions_Advanced_Parameters파워셸 안에.

제 해결책을 제안합니다.

$source = "C:\temp\"
$dest = "C:\TestData\"

#create destination directory if dont exist
New-Item -ItemType Directory $dest -Force


#To copy everything in a folder hierarchie
Get-ChildItem $source -Recurse | Copy-Item -Destination {$_.FullName.Replace($source, $dest)}  -Force

#To copy only directory hierarchie:
Get-ChildItem $source -Recurse -directory | Copy-Item -Destination {$_.FullName.Replace($source, $dest)}  -Force

#To copy only file (remove doublon be carefull):
Get-ChildItem $source -Recurse -file | Copy-Item -Destination $dest -Force

다음은 ProdData의 폴더 구조만 파일 없이 TestData로 복사합니다.

$from = "C:\ProdData"
$to = "C:\TestData"

Get-ChildItem -Path $from -Recurse | 
?{ $_.PSIsContainer } | 
Copy-Item -Destination {Join-Path $to $_.Parent.FullName.Substring($from.length)} -Force 

언급URL : https://stackoverflow.com/questions/9996649/copy-folders-without-files-files-without-folders-or-everything-using-powershel

반응형