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