powershell - 在 Powershell 中压缩文件夹时捕获错误

标签 powershell zip try-catch

我以前从未使用过 Powershell。经过一些研究后,我编写了一个压缩文件夹的脚本。

我想确保我可以捕获执行期间生成的任何错误,因此我添加了一个 Try Catch block ,并尝试记录所有错误。我需要确保压缩过程成功。

此脚本假设我们可以添加到现有的 zip 文件(如果它已经存在)。稍后我将添加一个检查以删除以前的 zip 文件,但现在如果我保持原样以测试日志记录,因为它会生成错误。

但是,错误没有按预期捕获和记录。关于我做错了什么有什么建议吗?错误是弹出窗口“此文件夹已包含名为“Backups”的文件夹。重命名您要复制的文件夹,然后再次执行该操作。

########################################################
#
# Zip-Folder.ps1
#
# Usage:
# To zip up a folder:
# (Zip Application) (Target Archive path and File Name) (Source Folder Path to Backup)     (Log Path and File Name)
# d:\zip-folder.ps1 d:\Backups_Archive d:\Backups
########################################################

try{
$target = $args[0]
$files = Get-item $args[1]
$log = $args[2]


if (-not $target.EndsWith('.zip')) {$target += '.zip'} 

if (-not (test-Path $target)) { 
  set-content $target ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) 
} 

$ZipFile = (new-object -com shell.application).NameSpace($target) 
# $files | foreach {$zipfile.CopyHere($_.fullname)} 

foreach($file in $files) 
    { 
        $zipfile.CopyHere($file.FullName)
            Start-sleep -milliseconds 500
    }
} catch {
    Add-Content $log $error[0]

}

执行: (Zip 应用程序)(目标存档路径和文件名)(备份的源文件夹路径)(日志路径和文件名) 例如 d:\zip-folder.ps1 d:\Backups_Archive d:\Backups d:\zip.log

最佳答案

您看到的弹出窗口是由 Shell 生成的。虽然you can suppress the UI by passing the flag 1024 ,我认为不可能将其作为可以在 Powershell 中捕获的错误来处理,因为 Shell 不会将其返回到 Powershell。您必须明确地处理这种情况,而不是捕获错误。

此外,it is generally accepted that this way of zipping files is not really very flexible并且也不能真正扩展大量文件(另一点是代码中的 sleep )

请使用一些命令行压缩工具(例如 7z.exe)进行压缩。

关于powershell - 在 Powershell 中压缩文件夹时捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8274021/

相关文章:

Java 的 try/catch 方法

visual-studio - 如何使用 PowerShell 更改 VS 包管理器控制台的前景色?

html - powershell 选择字符串添加中断/换行

linux - 如何压缩环境变量 : *** buffer overflow detected ***: zip terminated 中的非常长的文件列表

java - 如何在 java 中创建多部分压缩的 zip 文件

C# Try-catch 不捕获异常

Powershell从rabbitmqctl获取输出并解析异常

git - Start-Process "git"返回奇怪的 129 退出代码

c# - 使用 DotNetZip 和 MemoryStream 时,解压缩数据被填充为 '\0'

Java 返回值(在 try/catch 子句中)