source

PowerShell의 한 디렉터리에서 다른 디렉터리로 파일 집합을 재귀적으로 복사

ittop 2023. 8. 26. 00:04
반응형

PowerShell의 한 디렉터리에서 다른 디렉터리로 파일 집합을 재귀적으로 복사

모두 복사하려고 합니다.*.csproj.user재귀적으로 파일C:\Code\Trunk로.C:\Code\F2.

예:

C:\Code\Trunk\SomeProject\Blah\Blah.csproj.user

복사 대상:

C:\Code\F2\SomeProject\Blah\Blah.csproj.user

현재의 시도는 다음과 같습니다.

복사 항목 C:\Code\Trunk - 필터 *.csproj.user - 대상 C:\Code\F2 - 재귀 - What If

내가 얻는 것은:

what if: 대상 "Item:"에서 "Copy Directory" 작업 수행C:\코드\트렁크 대상:C:\코드\F2\트렁크".

먼저, 그것은 그것들을 모두 새로운 폴더에 넣길 원합니다.F2\Trunk그것은 잘못된 것입니다.둘째, 파일 목록이 하나도 없습니다.복사할 파일이 10개 정도 있을 것입니다.

명령어의 올바른 구문은 무엇입니까?감사합니다!

업데이트:

좋아요, 이 사건이 이 사건이C:\Code\F2이미 존재합니다.존재하지 않는 대상으로 파일을 복사하려고 하면 작동합니다.

기존 파일을 덮어씁니다..csproj.user파일을 저장할 수 있습니다.

당신들은 정말 간단할 때 이 일을 끔찍하게 복잡하게 만들고 있습니다.

Copy-Item C:\Code\Trunk -Filter *.csproj.user -Destination C:\Code\F2 -Recurse

디렉토리를 복사하여 F2에 "트렁크" 디렉토리를 작성합니다.최상위 트렁크 폴더를 만들지 않으려면 PowerShell에서 다음과 같이 복사하라는 명령을 중지해야 합니다.

Get-ChildItem C:\Code\Trunk | Copy-Item -Destination C:\Code\F2 -Recurse -filter *.csproj.user

가장 많이 투표된 답변은 단일 파일 형식에 대해 완벽하게 유효하지만, 여러 파일 형식을 복사해야 하는 경우 더 단순한 사용으로 이 목적에 정확히 맞는 로보카피라는 더 유용한 기능이 있습니다.

robocopy C:\Code\Trunk C:\Code\F2 *.cs *.xaml *.csproj *.appxmanifest /s

이전에 본 적이 있지만 PowerShell이 제대로 이해하지 못하는 이유를 모르겠습니다(IMHO).제가 하는 일이 더 번거롭지만 효과가 있습니다.

$Source = 'C:\Code\Trunk'
$Files = '*.csproj.user'
$Dest = 'C:\Code\F2'
Get-ChildItem $Source -Filter $Files -Recurse | ForEach{
    $Path = ($_.DirectoryName + "\") -Replace [Regex]::Escape($Source), $Dest
    If(!(Test-Path $Path)){New-Item -ItemType Directory -Path $Path -Force | Out-Null
    Copy-Item $_.FullName -Destination $Path -Force
}

저는 제이컬의 답변을 시도했지만 저에게는 통하지 않았습니다.저는 그것을 작동시키기 위해 아래와 같이 변경해야 했습니다.C:도 만들었습니다.작동하기 전의 \Code\F2 폴더입니다.

Get-ChildItem C:\Code\Trunk -Recurse -filter *.csproj.user | Copy -Destination C:\Code\F2

1번 답은 좋아보였고, 저는 로 바꿨습니다.Move-Item내 목적을 위하여그러나 각 폴더에서 재귀적으로 첫 번째 파일만 이동한다는 것을 발견했습니다.아래는 문서 파일을 PDF로 변환하는 것을 포함하는 제 전체 스크립트입니다.

$Source = 'C:\Users\sgrody\Desktop\NSPM-Vol1'
$MoveFiles = '*.PDF'
$Dest = 'C:\Users\sgrody\Desktop\MedPassPDF'
$Folders = Get-ChildItem $Source -Directory -Recurse 


ForEach ($Folder in $Folders)
{
    $wdFormatPDF = 17
    $word = New-Object -ComObject word.application
    $word.visible = $false
    $folderpath = "$($Folder.FullName)\*"
    $fileTypes = "*.docx","*doc"
    Get-ChildItem -path $folderpath -include $fileTypes |
    foreach-object 
    {
     $path =  ($_.fullname).substring(0,($_.FullName).lastindexOf("."))
     "Converting $path to pdf ..."
     $doc = $word.documents.open($_.fullname)
     $doc.saveas([ref] $path, [ref]$wdFormatPDF)
     $doc.close()
    }
    $word.Quit()
}

Get-ChildItem $Source -Filter $MoveFiles -Recurse | ForEach{
    $Path = ($_.DirectoryName + "\") -Replace [Regex]::Escape($Source), $Dest
    If(!(Test-Path $Path)){New-Item -ItemType Directory -Path $Path -Force | Out-Null
    Move-Item $_.FullName -Destination $Path -Force
    }
}

최근에 여러 하위 폴더에 있는 파일을 교체해야 했습니다. 아래와 같이 했습니다.

foreach($file in (Get-ChildItem File_you_want_to_be_copied.txt -Recurse)) {$target=$file.directoryname; Copy-Item -path C:\Source_Path\File_you_want_to_be_copied.txt -Destination $target} 

언급URL : https://stackoverflow.com/questions/25817034/recursively-copy-a-set-of-files-from-one-directory-to-another-in-powershell

반응형