2016-06-07 144 views
0

如何編寫PowerShell腳本,只有當文件夾有例如.txt.csv.xls.xlsx某些類型的文件存檔文件夾。我的源路徑是C:\Temp\Test\並且有5子文件夾:存檔文件夾時文件夾中有某些文件類型

  • foldera
  • FolderB中
  • folderc
  • folderd
  • foldere
  • 存檔

只有folderafolderbfolderc將文件歸檔,歸檔路徑爲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

相關問題