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
'source' 카테고리의 다른 글
MySQL varchart 설정이 너무 깁니다. (0) | 2023.08.26 |
---|---|
CMD 내부에서 PowerShell.exe를 종료하는 방법 (0) | 2023.08.26 |
'Invoke-Sqlcmd'이(가) cmdlet의 이름으로 인식되지 않습니다. (0) | 2023.08.26 |
Javascript에서 MVC의 모델 속성 액세스 (0) | 2023.08.26 |
포크()와 vfork()의 차이점은 무엇입니까? (0) | 2023.08.26 |