我有以下代码来解压缩目录树中的许多文件夹:
new-Item E:\Files -type directory
Get-Childitem -path E:\SNL_Insurance\* -recurse -exclude "*.md5" |
Foreach-object {
$file = $_
write-host $file;
$destination = "E:\Files"
$shell = new-object -com shell.application
$zip = $shell.NameSpace($file.Fullname)
foreach($item in $zip.items()){
if ($item.name -eq ".txt") {
$shell.Namespace($destination).copyhere($item)
}
}
}
如果没有if语句,脚本也会复制zip文件,而不仅仅是下面包含的文本文件。我以为我可以检查以确保文件扩展名是.txt(或* .txt我已经尝试过)但$ item.name似乎不包含我认为它做的。如果您有任何想法和/或可以在此解释$ shell变量(特别是$ shell.Namespace,这将非常有用),提前感谢。
编辑:感谢您的回复。在看到这些答案之前,我实际上找到了另一种方法。如果有人有兴趣,我发现这是解决方案:
new-Item E:\Files -type directory
Get-Childitem -path E:\SNL_Insurance\Insurance\* -recurse -exclude "*.md5"|
Foreach-object {
if ($_.extension -eq ".zip") {
Get-Childitem -path $_ -recurse|
Foreach-object {
$file = $_
write-host $file;
$destination = "E:\Files"
$shell = new-object -com shell.application
$zip = $shell.NameSpace($file.Fullname)
foreach($item in $zip.items()){
$shell.Namespace($destination).copyhere($item)
}
}
}
}
答案 0 :(得分:1)
只复制您可以使用的文本文件:
foreach($item in $zip.items()){
if ($item.Type -eq 'Text Document') {
$shell.Namespace($destination).copyhere($item)
}
}
OR
$zip.items() | Where-Object {$_.Type -eq 'Text Document'} |
Foreach-Object { $shell.NameSpace($Destination).copyhere($_)}
我怎么知道使用type
属性?我用过:
$zip.items()
查看可以使用的所有属性。
答案 1 :(得分:0)
Items()
方法枚举FolderItem
个对象,它们(与query
个对象不同)没有FileInfo
属性。您可以与-like
运算符进行通配符匹配:
Extension
或(如@Kiran建议的那样)检查对象的类型:
foreach ($item in $zip.Items()) {
if ($item.Name -like '*.txt') {
$shell.NameSpace($destination).copyhere($item)
}
}