如何只在powershell中移动特定的文件类型

时间:2016-05-25 14:14:36

标签: powershell

我试图只将特定的文件类型(例如 .txt, .fehler)移动到另一个目录。我想将上次修改日期的文件分成单独的文件夹(按年份)。如果目录不在那里,它应该创建该文件夹。如果我没有过滤文件类型,以下代码可以正常工作。我需要做什么才能正确过滤? 到目前为止,这是我的代码:

$path = "H:\Downloads\tmp\source\"
$targetDir = "H:\Downloads\tmp\dst\"
Foreach($file in  (Get-ChildItem $path -Include *.txt,*.fehler))
{
   $year = $file.LastWriteTime.Year
   $pastePath = $targetDir + $year.ToString()
   if(-not (Test-Path $pastePath ) -and ($year.ToString().Length -eq 4))
   {
      md $pastePath
   }
   $source = $path + $file
   Move-Item $source $pastePath -Force
}

2 个答案:

答案 0 :(得分:0)

将您的扩展名放在引号中,

像这样:

Foreach($file in (Get-ChildItem $path -include "*.txt","*.fehler"))

答案 1 :(得分:0)

我仍然不知道为什么过滤器不起作用但这对我有用:

$path = "H:\Downloads\tmp\source\"
$targetDir = "H:\Downloads\tmp\dst\"
Foreach($file in  (Get-ChildItem $path | Where-Object {$_.Extension -match ".txt" -or ".fehler" } ))
{
   $year = $file.LastWriteTime.Year
   $pastePath = $targetDir + $year.ToString()
   if(-not (Test-Path $pastePath ) -and ($year.ToString().Length -eq 4))
   {
        md $pastePath
   }
   $source = $path + $file
   Robocopy.exe $path $pastePath $file /MOV
   <#Move-Item $source $pastePath -Force -Verbose#>
}