我是powershell的新手,希望列出所有的文件,包含在一个目录中的zip文件。我不想使用任何第三方工具。
Structure of the directory is
mydir > dir
a.zip
b.zip
c.zip
with each file containing files named 1.txt or 2.txt or 3.txt
I am trying to get an output in the form
a.zip:1.txt
a.zip:2.txt
b.zip:files\3.txt
b.zip:4.txt
c.zip:1.txt
d.zip:10.txt
字符串
等
不幸的是,我的环境不是4.5,而是4.0。我能够写了这段代码,但它仍然需要大量的解析清理,因为解压缩提供了很多额外的信息。
$packagedir="C:\Packages"
$unzipcmd = "c:\bins\unzip.exe -l"
$unmatchstr = "*Archive*"
pushd .
cd $packagedir
$filelist= Get-ChildItem -Recurse | Select-Object -ExpandProperty FullName
foreach ($item in $filelist)
{$ziplist = Invoke-Expression "$unzipcmd $item";
foreach ($item2 in $ziplist)
{
if ($item2.Contains("Archive") )
{
}
else
{
echo $item "::" $item2}}
}
popd
型
在unzip -l输出中有很多额外的信息,比如列标题、分隔符、日期和每个文件名之前的其他日期。
5条答案
按热度按时间m0rkklqb1#
在.NET Framework 4.5中,有一个ZipFile类非常方便。
要列出归档文件中的条目,您可以在PowerShell中像这样使用它:
字符串
**更新:**这似乎做的伎俩:]
型
lfapxunr2#
如果你有PowerShell Community Extensions,你可以使用它的
Read-Archive
小程序。hgtggwj03#
我也有这个问题!我精心制作了这个PS脚本基于这个真棒脚本:https://gallery.technet.microsoft.com/scriptcenter/PowerShell-Get-Specific-9b35352f
它所做的只是简单地列出所有的“txt”文件沿着与zip文件找到!
原始脚本将文件复制到指定的目录中--这也是非常有用的。
一些注解:
您必须定义静态变量确保目录变量都不包含最后的反斜杠,即“目录”和NOT“目录/”
这就是:
字符串
bqucvtff4#
我不知道第三方是怎么样的,但是你可以使用
C:\Windows\System32\tar.exe
。旧版本的Windows没有它。在Linux发行版中,这个实用程序的工作方式不同。也许它不是脚本的最佳选择,但是你可以方便地在shell中使用它。个字符
在
-tf
中,t代表“list”,f代表“file”。执行tar.exe --help
了解更多。gcxthw6b5#
使用PSCompression Module,您可以使用
Get-ZipEntry
列出zip条目。该模块还附带了一组小工具来管理Zip和Gzip存档。字符串