2016-06-07 3 views
0

폴더에 특정 형식의 파일 (예 : .txt, .csv, .xls, .xlsx)이있는 경우에만 폴더를 보관하는 PowerShell 스크립트를 작성하는 방법. 내 소스 경로가 C:\Temp\Test\이고 5 하위 폴더가 있습니다 :폴더에 특정 파일 형식이있는 경우에만 폴더 보관

  • 폴 데라
  • folderb
  • folderc
  • folderd는
  • foldere
  • 아카이브

foldera, folderb , folderc 아카이브 경로가 C:\Temp\Test\Archive이고 여기에 foldersfoldera, folderb이므로 이러한 폴더를 만들 필요는 없지만 파일을 압축하여 복사해야하므로 folderc을 만들어야하고 파일을 압축하여 복사해야합니다.

나는 파일이 아닌 특정 파일에 있던 폴더를 얻을 수 아래의 코드를 사용하여.

$ignorefolders = @(
    "C:\Temp\misc" 
    ) 

$archive = "C:\Temp\Archive" 

[regex]$exclude = ‘(?i)^(‘ + (($ignorefolders |foreach {[regex]::escape($_)}) –join “|”) + ‘)’ 

$includefiletype = @("*.txt", "*.csv", "*.dat", "*.xls", "*.xlsx")  
$workingDir = "C:\Temp" 

Get-ChildItem $workingDir -recurse -include $fileFilter | Where {$_.FullName -notmatch $exclude} | Copy-Item -Destination $archive 

답변

0

이 디렉토리를 얻을 FileInfo 객체의 디렉토리 속성을 선택하려면이 Get-ChildItem에서 반환, 나는 또한 해요 당신이 어떤 중복 싶지 않아 가정, 그래서 당신은 sort 사용하는 사람들을 필터링해야합니다 : 소스를

Get-ChildItem -Recurse -Path $source -include*.txt,*.csv,*.xls,*.xlsx | select directory | sort -Unique -Property Directory | Select -expand Directory | Copy-Item -Destination $archive -WhatIf 
+0

내가 오류 "복사-항목 드라이브를 찾을 수 없습니다"얻을 안 복사-항목이 지정된 경로. Copy-Item을 "Copy-Item -Path $ source -Destination $ archive -WhatIf"로 변경하면 매개 변수 바인딩 오류가 발생합니다. – user25407

+0

Copy-Item처럼 보이지는 않지만, FileInfo 객체를 입력으로 사용하기 때문에 Copy-Item으로 보내기 전에 속성을 확장하는 편집이 가능합니다. 그러나 원하는대로 할 수 없다는 느낌이 들었습니다. Copy-Item에 -Recurse 인수를 추가하려고합니다. – zdan

+0

아래 스크립트를 사용하여 파일 및 폴더를 필터링 할 수 있습니다. 그러나 폴더 만 복사하면 모든 파일이 외부로 복사됩니다. 파일이있는 폴더를 어떻게 복사합니까? – user25407

관련 문제