繁体   English   中英

使用 PowerShell 将几个文件夹打包成一个 zip

[英]Several folders into a zip with PowerShell

我有几个文件夹dir_01dir_02dir_03 ,我想备份到一个 zip 文件中,比如backup.zip 这必须保存在具有今天日期的文件夹中。 我需要一个 .bat 文件来完成这项工作; 不允许额外的第三方可执行文件。

在这里,我找到了如何使用今天的日期创建文件夹,但是我在将$destination传递给-DestinationPath时遇到了问题。 我创建了一个调用 PowerShell 的 .bat。 代码给我的问题:

powershell.exe $destination = New-Item -Path 'C:\path\to\destionation' -ItemType Directory -Name ("$(Get-Date -f yyyy-MM-dd)")

powershell.exe -nologo -noprofile -command Compress-Archive -Path 'C:\path\dir_01', 'C:\path\dir_02', 'C:\path\dir_03' -DestinationPath $destination\backup.zip -Force

错误消息如下:

New-Object : Exception calling ".ctor" with "2" argument(s): "Access to the path 'C:\backup.zip' is denied."
At
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1:729
char:30
+ ... ileStream = New-Object -TypeName System.IO.FileStream -ArgumentList $ ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [New-Object], MethodInvocationException
    + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

但是,如果我对目的地的路径进行硬编码,则代码有效,如下所示:

powershell.exe -nologo -noprofile -command Compress-Archive -Path 'C:\path\dir_01', 'C:\path\dir_02', 'C:\path\dir_03' -DestinationPath 'C:\whole\path\backup.zip' -Force

但是这样做,我无法将backup.zip保存在今天的文件夹中。

问题:如何将backup.zip保存在我使用今天创建的文件夹中?

您可以在同一个 PowerShell 会话中执行这两个命令,方法是用分号分隔它们。

powershell.exe $destination = New-Item -Path 'C:\path\to\destionation' -ItemType Directory -Name ("$(Get-Date -f yyyy-MM-dd)"); Compress-Archive -Path 'C:\path\dir_01', 'C:\path\dir_02', 'C:\path\dir_03' -DestinationPath $destination\backup.zip -Force

这将启动 PowerShell 并让它创建文件夹,然后在同一个会话中将内容压缩到其中,而不是创建一个会话,在该会话中创建一个文件夹,关闭会话,启动一个新的 PowerShell 会话,压缩内容,关闭第二届会议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM