相关疑难解决方法(0)

Windows批处理是否支持异常处理?

Windows批处理编程是否支持异常处理?如果没有,有没有办法有效地模拟批处理文件中的异常处理?

我希望能够在任何CALL级别的批处理脚本中的任何地方"抛出异常",并重复弹出CALL堆栈,直到它找到一个活动的"TRY块",于是"CATCH块"可以处理异常完全继续,或做一些清理并继续弹出CALL堆栈.如果永远不处理异常,则终止批处理并且控制返回到命令行上下文并显示错误消息.

已经有几种方法可以在任何CALL深度上终止批处理,但这些技术都不允许通过异常处理通常在其他语言中提供的任何结构化清理活动.

注意: 这是我已经知道最近才被发现的好答案的情况,我想分享这些信息

cmd exception-handling exception batch-file

26
推荐指数
1
解决办法
2万
查看次数

如何从函数中退出批处理文件?

我有一个简单的函数来检查目录:

:direxist
if not exist %~1 (
    echo %~1 could not be found, check to make sure your location is correct.
    goto:end
    ) else (
    echo %~1 is a real directory
    goto:eof
    )
Run Code Online (Sandbox Code Playgroud)

:结束写成

:end
endlocal
Run Code Online (Sandbox Code Playgroud)

我不明白为什么程序不会在goto:end被调用后停止.我有另一个函数使用相同的方法来停止程序,它工作正常.

:PRINT_USAGE
echo Usage:
echo ------
echo <file usage information>
goto:end
Run Code Online (Sandbox Code Playgroud)

在这种情况下,程序在调用后停止:end; 为什么这不起作用:direxist?谢谢您的帮助!

goto batch-file exit

14
推荐指数
2
解决办法
5万
查看次数

为什么非交互式批处理脚本认为我已按下control-C?

因此,当输出日志中出现突然显示时,我的批处理脚本正在顺利进行:

21:27:13.99 c:\apps\w7lab-scripting>some-command
Error 3221225786
^CTerminate batch job (Y/N)? 
Run Code Online (Sandbox Code Playgroud)

并且脚本停止了.

批处理脚本在会话0中运行,所以我知道它没有收到真正的control-C,也没有我的代码调用GenerateConsoleCtrlEvent所以不能这样.唯一的线索是当时some-command正在与交互式应用程序通信,并且应用程序的控制台收到了一个控件-C.预期的行为是some-command显示其他应用程序的退出代码,然后使用相同的代码退出.批处理脚本会适当地处理错误,如果它没有停止死亡.

这里发生了什么?

windows batch-file

9
推荐指数
1
解决办法
3654
查看次数

标签 统计

batch-file ×3

cmd ×1

exception ×1

exception-handling ×1

exit ×1

goto ×1

windows ×1