2

我们每天都会运行一个脚本,该脚本会从人们用来传输数据的区域中删除旧文件和目录。除了一小部分之外,一切都很好。如果文件夹超过 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

  } 

}


4

3 回答 3

3
$NumberOfFiles = (gci -Force $dir | ?{$_ -notmatch "thumbs.db"}).count
于 2012-06-13T19:55:10.143 回答
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。因此,您必须在这些方法中添加排除选项以忽略 thumbs.db。

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

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

于 2012-06-13T19:24:48.717 回答
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
于 2012-09-24T20:48:53.050 回答