Powershell getfiles.count()来排除thumbs.db

时间:2012-06-13 18:47:07

标签: powershell getfiles

我们每天都会运行一个脚本,从人们用来传输数据的区域中删除旧文件和目录。一切都很好,除了一个小部分。我想删除一个文件夹,如果它超过7天并且它是空的。由于thumbs.db文件,脚本始终在文件夹中显示1个文件。我想我可以查看一个文件是否是thumb.db,如果是这样只是删除文件夹,但我确信有更好的方法。

 
$location = Get-ChildItem \\dropzone -exclude thumbs.db
foreach ($item in $location) {

  other stuff here going deeper into the tree...

  if(($item.GetFiles().Count -eq 0) -and ($item.GetDirectories().Count -eq 0)) {

    This is where I delete the folder but because the folder always has
     the Thumbs.db system file we never get here

  } 

}


3 个答案:

答案 0 :(得分:3)

$NumberOfFiles = (gci -Force $dir | ?{$_ -notmatch "thumbs.db"}).count

答案 1 :(得分:1)

您可以尝试使用get-childitem -exclude选项,其中包含目录中的所有文件/项目 计算除了那些以db:

结尾的那些
$location = get-childitem -exclude *.db

如果您指定要排除的文件(在本例中为thumbs.db

),也会有效
$location = get-childitem -exclude thumb.db

让我知道这是否成功。


啊,我也注意到了一些事情,

$location = get-childitem -exclude *.db

只会处理位置目录中的.db项目,如果你要深入到树中(比如你的GetFiles()和GetDirectories()方法),那么你仍然可以找到一个thumb.db。因此,您必须在这些方法中添加exclude选项以忽略thumbs.db。

因此,例如在$ item.getFiles()方法中,如果使用get-childitem,则还必须指定-exclude选项。

对不起,我应该更仔细地阅读你的问题。

答案 2 :(得分:1)

使用此方法以简单文本文件的形式提供排除列表,以排除计数中的特定文件或扩展名:

$dir = 'C:\YourDirectory'
#Type one filename.ext or *.ext per line in this txt file
$exclude = Get-Content "C:\Somefolder\exclude.txt"
$count = (dir $dir -Exclude $exclude).count
$count