【问题标题】:Powershell system.io.compression zipping files and/or FoldersPowershell system.io.compression 压缩文件和/或文件夹
【发布时间】:2013-11-19 09:13:49
【问题描述】:

我在工作中产生一些自动化任务,我需要压缩某些文件和/或文件夹。 我想要做的是压缩文件夹 1 中的文本文件,其中包含 4 个 txt 文件。

执行此命令会出错,但仍会压缩 txt 文件:

Exception calling "CreateFromDirectory" with "4" argument(s): "The directory name is invalid.
"
At line:15 char:13
+             [System.IO.Compression.ZipFile]::CreateFromDirectory($Source, "$Sour ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException

我现在得到的是:

[Reflection.Assembly]::LoadWithPartialName( "System.IO.Compression.FileSystem" )
$includeBaseDirectory = $false
$compressionLevel= [System.IO.Compression.CompressionLevel]::Optimal

$source = "C:\folder1\*"
Get-ChildItem $source -include *.txt  |
Foreach {
        $Source = $_.fullName
        [System.IO.Compression.ZipFile]::CreateFromDirectory    ($Source, "$Source.zip",$compressionLevel, $includebasedirectory)
        }

另外,如果我想压缩文件夹 1 中的文件夹,我使用 -directory 开关而不是包含。 不会产生任何错误消息。 有什么建议吗?

【问题讨论】:

  • 您的源目录名无效。它应该是:“C:\folder1”(不带通配符)
  • 没有通配符不会列出文件夹中的txt文件。
  • 使用 -filter 代替 -include。包含用于过滤路径。
  • 这完全一样。压缩文件,但每个压缩文件都会产生错误
  • 编辑:它创建 zip 但不压缩文件

标签: powershell io compression system


【解决方案1】:

@DavidBrabant 是正确的,将通配符放在路径中是不正常的,但我认为在这种情况下你可以摆脱它,因为你正在通过 foreach 语句传递结果。

我相信问题是你CreateFromDirectory 的第一个参数应该是一个目录名,但是你给它传递了一个文件名。使用变量名($Source 和 $source)并没有真正的帮助。

当您调用 CreateFromDirectory 时,由于以下行,它将包含第一个 zip 文件的全名:

$Source = $_.fullName

我猜你有一个过滤器“*.txt”,你想将单个文件而不是整个文件夹添加到一个 zip 文件中,那么它会涉及更多。示例见此处:http://msdn.microsoft.com/en-us/library/hh485720(v=vs.110).aspx

但如果您只是想压缩文件夹,请使用:

$sourceFolder = "C:\folder1"
$destinationZip = "c:\zipped.zip" 
[Reflection.Assembly]::LoadWithPartialName( "System.IO.Compression.FileSystem" )
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourceFolder, $destinationZip)

【讨论】:

  • 唯一的事情是我希望它使用自己的原始名称进行压缩。另外我只想要一些压缩文件,没有文件夹。
  • 这个有效:Get-ChildItem "C:\temp\test" -Directory | foreach { $Folder = $_.fullName [System.IO.Compression.ZipFile]::CreateFromDirectory($Folder, "$Folder.zip",$compressionLevel,$ExcludeBaseDirectory)
  • 如何增加压缩以使文件更小?
  • @DavidMartin 谢谢这正是我想要的,干杯
猜你喜欢
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 2010-09-05
  • 2017-11-03
  • 1970-01-01
  • 2018-09-30
相关资源
最近更新 更多