gpt4 book ai didi

powershell - 处理键盘中断,执行结束 block

转载 作者:行者123 更新时间:2023-12-03 16:49:18 24 4
gpt4 key购买 nike

我有一个处理文件列表的 powershell 函数。我使用 begin , processend为此阻止:

begin {
# prepate some stuff
}
process {
# process each file
}
end {
# clean up
}

现在,当我按下 Ctrl+C 时,整个脚本就在原处终止。这对于流程部分来说并不是真正的问题,因为它只会对最后一个命令进行永久性更改。

但是我仍然想执行 end 中的内容块清理一下,并打印一些关于确实设法得到处理的文件的统计信息。

有没有一种干净的方法来捕获键盘中断,同时保持开始/处理/结束结构?

最佳答案

一种方法是在脚本块运行时禁用 Ctrl-C 作为中断的处理。您当然必须手动检查它是否会中断,但它应该保证结束块运行

begin { 
[Console]::TreatControlCAsInput = $true
}
process {
# Maybe check for Ctrl-C here to terminate processing
}
end {
[Console]::TreatControlCAsInput = $false
}

为了以非阻塞方式检查 Ctr-C 作为输入,您可以执行以下操作
if ([Console]::KeyAvailable) {
$key = [Console]::ReadKey($true)
if ($key.key -eq "C" -and $key.modifiers -eq "Control") {
# Clean up and exit
}
}

关于powershell - 处理键盘中断,执行结束 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20708685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com