类似于已经完成的工作,您可以像这样设置Shell.Application
命名空间。然后,您可以将提取的目录复制到目标路径。
抱歉,这个问题分散在互联网上,但是我还没有找到一个令人满意的答案,该答案仅使用Powershell 2.0(带有.NET v3.5)-没有外部库或程序
我正在使用以下代码从log.txt
中提取ZipFile.zip
(无论log.txt
的位置如何]
$Destination = (new-object -com shell.application).NameSpace('C:\ZipExtractDir')
$ZipFile = (new-object -com shell.application).NameSpace('C:\ZipFile.zip')
$Destination.CopyHere(($Zipfile.Items() | where-object {$_.Name -like '*log.txt'}), 1044)
log.txt
在目录根\log.txt
中,则可以工作>log.txt
在子目录\Subfolder\log.txt
中则失败{$_.Name -Like '*Subfolder\log.txt'}
(双引号和单引号均失败)-eq
-like
-contains
''
""
$_.FullName
我很确定我过滤不正确-任何人都可以提供此代码的帮助,以便它也可以解析子目录吗?
抱歉,这个问题分散在Internet上,但是我还没有找到令人满意的答案,该答案仅使用Powershell 2.0(带有.NET v3.5)-没有外部库或程序正在使用...]]] >
类似于已经完成的工作,您可以像这样设置Shell.Application
命名空间。然后,您可以将提取的目录复制到目标路径。
$zipFilePath = "Zipfile.zip" $destinationPath = "C:\Users\Public\Downloads" $zipfile = (New-Object -Com Shell.Application).NameSpace($zipFilePath) $destination = (New-Object -Com Shell.Application).NameSpace($destinationPath) $destination.CopyHere($zipfile.Items())
然后列出
log.txt
文件,我们可以使用Join-Path
构建完整的提取路径。这基本上只是将压缩文件名从Join-Path
附加到目标路径。然后只需使用System.IO.Path.GetFileNameWithoutExtension()
和System.IO.Path.GetFileNameWithoutExtension()
和Get-ChildItem
开关递归列出文件。
-Recurse
并且要对PowerShell 2.0]进行测试,我们可以将
-Filter
与$extractedPath = Join-Path -Path $destinationPath -ChildPath ([System.IO.Path]::GetFileNameWithoutExtension($zipFilePath)) Get-ChildItem -Path $extractedPath -Filter log.txt -Recurse
一起使用:
-version 2
UPDATE
如果要在提取前检查文件,则需要自己递归目录。以下是如何完成此操作的演示。
powershell.exe
用法:
powershell.exe -version 2 .\test.ps1
类似于已经完成的工作,您可以像这样设置Shell.Application
命名空间。然后,您可以将提取的目录复制到目标路径。