相关疑难解决方法(0)

批处理文件 - 错误处理

我正在编写用于部署asp.net解决方案的第一个批处理文件.我一直在谷歌搜索一般的错误处理方法,找不到任何真正有用的东西.

基本上如果出现任何问题我想停下来打印出错的地方.

任何人都可以给我任何指示吗?

batch-file

59
推荐指数
4
解决办法
18万
查看次数

从函数内部退出批处理脚本

我的批处理文件有问题.它通过这样的方式自动构建几个程序:

  • 设置一些编译标志
  • 跑'gmake all'
  • 调用"检查错误级别"功能,如果错误级别为1,则退出

所以它看起来像这样:

set FLAG=1
...
gmake all
call :interactive_check
set OTHERFLAG=1
...
gmake all
call :interactive_check
Run Code Online (Sandbox Code Playgroud)

其中有6或7个(它可能会增长).所以我创建了一个函数来检查errorlevel而不是在每一步复制/粘贴它.问题是:错误检查是通过一个函数完成的:

:interactive_check
if errorlevel 1 (
echo.
echo /!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\
echo Error in compilation process... exiting
echo /!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\
echo.
cd %root_dir%
exit /B 1
) ELSE (
echo.Continuing to next step
)
goto:eof
Run Code Online (Sandbox Code Playgroud)

现在,在运行它时,exit /B 1只需退出函数,但不退出批处理文件.

你是否知道如何退出整个批处理文件而不必在每一步复制/粘贴我的"if errorlevel 1 .."?

windows function batch-file exit

18
推荐指数
3
解决办法
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万
查看次数

"|| exit /b" 和 "|| exit /b !errorlevel!" 之间的区别

我们有一堆.bat构建脚本,这些脚本由基于 PowerShell 的 GitLab 运行器调用,这些运行器最近重构为:

program args
if !errorlevel! neq 0 exit /b !errorlevel!
Run Code Online (Sandbox Code Playgroud)

更简洁:

program args || exit /b
Run Code Online (Sandbox Code Playgroud)

今天我调查了一个构建作业,如果您查看错误日志,该作业显然失败了,但报告为成功。经过大量实验,我发现这种模式并不总是按预期工作:

program args || exit /b
Run Code Online (Sandbox Code Playgroud)

但是当前者没有时,这似乎确实有效:

program args || exit /b !errorlevel!
Run Code Online (Sandbox Code Playgroud)

我已经阅读了 SO question Windows batch exit option b with or without errorlevel和下面来自https://www.robvanderwoude.com/exit.php的声明,但仍然不能完全解释我正在观察的内容。

DOS 联机帮助 (HELP EXIT) 没有明确说明 /B 参数退出当前脚本实例不一定与退出当前脚本相同。即,如果脚本在 CALLed 代码段中,则 EXIT /B 退出 CALL,而不是脚本。


这是我用来探索这个的最小批处理文件:

@echo off
setlocal EnableDelayedExpansion
cmd /c "exit 99" || exit /b
:: cmd /c …
Run Code Online (Sandbox Code Playgroud)

powershell cmd batch-file

12
推荐指数
3
解决办法
426
查看次数

批处理文件是否支持退出陷阱?

Windows .bat脚本是否具有类似于退出陷阱的功能,这将允许注册始终需要运行的清理操作?

我对使用Powershell或其他shell的任何解决方案都不感兴趣(我已经在目标系统上安装了Python,所以如果在批处理文件中无法完成,我将在try中将一堆调用包装到subprocess.Popen中. ..最后).

batch-file

6
推荐指数
1
解决办法
5640
查看次数

标签 统计

batch-file ×5

exit ×2

cmd ×1

function ×1

goto ×1

powershell ×1

windows ×1