标签: errorlevel

将ERRORLEVEL重置为零的最简单方法是什么?

我有一个post-build事件,它为ac#project运行一些命令.最后一个命令有时会导致ERRORLEVEL值不等于零,然后构建失败.

我想附加一行额外的命令来始终将ERRORLEVEL值设置为零.最方便的方法是什么?

windows cmd batch-file errorlevel

66
推荐指数
7
解决办法
7万
查看次数

从bash脚本访问ERRORLEVEL

我有一个应用程序,只有从Windows命令提示符调用时才能正常工作.与输入/输出流有关.

所以我可以通过将它作为参数传递给cmd来从bash脚本中调用它.

cmd/c"badapp"

这很好 - 但偶尔badapp会因网络问题而失败 - 我得不到反馈.无论如何都要从bash脚本中检查ERRORLEVEl - 或者在运行bash脚本的终端上查看badapp的输出?

bash cmd errorlevel

42
推荐指数
1
解决办法
4万
查看次数

IF内的ERRORLEVEL

只是偶然发现了一个奇怪的事情,%ERRORLEVEL%想知道是否有人知道为什么以及是否有办法解决它.从本质上讲,似乎if语句中执行的命令不设置%ERRORLEVEL%变量.的ERRORLEVEL(如IF ERRORLEVEL 1,这是从不同的IF %ERRORLEVEL% EQU 1)检查似乎还在正常工作的,所以我可能可以解决它,但它仍然是很好能够打印错误水平.用于调试或其他.

@echo off
Set TESTVAR=1

tasklist | find /I "IsntRunning.exe" > NUL
echo OUTSIDE_IF %ERRORLEVEL%

ThisWillSetErrorLevelTo9009ieNotRecognizedCommand

tasklist | find /I "IsntRunning.exe" > NUL
echo OUTSIDE_IF %ERRORLEVEL%

ThisWillSetErrorLevelTo9009ieNotRecognizedCommand

IF %TESTVAR% EQU 1 (
    Set ERRORLEVEL=
    tasklist | find /I "IsntRunning.exe" > NUL
    echo INSIDE_IF  ERRORLEVEL %ERRORLEVEL%

    IF ERRORLEVEL 1 (
        echo INSIDE_IF2  ERRORLEVEL GREQ 1 %ERRORLEVEL%
    )
    IF ERRORLEVEL 2 (
        echo INSIDE_IF2  ERRORLEVEL GREQ 2 …
Run Code Online (Sandbox Code Playgroud)

batch-file errorlevel

34
推荐指数
1
解决办法
3万
查看次数

轻松查看dos命令返回码的方法

有时我在cmd中运行命令,例如:

fc/b file1 file2

并希望看到来自fc的返回码.有一个简单的方法吗?

windows cmd errorlevel return-code

33
推荐指数
1
解决办法
5万
查看次数

For循环中的Errorlevel(批处理窗口)

我有以下Windows批处理代码:

for %%i in (iidbms iigcc iigcd dmfacp dmfrcp rmcmd qwerty) do (
  tasklist | findstr /i %%i
  echo %errorlevel%
  if %errorlevel% == 0 (echo %%i ok process found %errorlevel%)
  if %errorlevel% == 1 (echo %%i no process found %errorlevel%)
)
Run Code Online (Sandbox Code Playgroud)

但它没有像我期望的那样起作用.

所有名称进程iidbms,iigcc,iigcd,dmfacp,dmfrcp,rmcmd都是真实的,并且找到了它们,而qwerty是一个发明的,不应该找到它,所以应该打印"no process found 1",但它不会,它总是打印0.

但我所注意到的是,如果我tasklist | findstr /i qwerty从dos提示符运行,就在有%errorlevel%= 1之后.

什么样的答案可能或更好?

windows batch-file errorlevel

22
推荐指数
2
解决办法
3万
查看次数

成功后哪个cmd.exe内部命令将ERRORLEVEL清除为0?

在Windows批处理脚本中处理错误的常用方法是使用
if errorlevel 1 ...或等if %errorlevel% neq 0 ....通常,人们希望错误处理代码保留ERRORLEVEL.

我相信所有外部命令总是会导致ERRORLEVEL被设置为某个值,因此错误处理代码必须在执行外部命令之前在环境变量中保留ERRORLEVEL.

但内部命令怎么样?问题是,一些内部命令在成功时将ERRORLEVEL清除为0,而有些则没有.而且我找不到任何指定哪些命令做什么的文档.

所以问题是,哪些内部命令成功后将ERRORLEVEL清除为0?不是关于返回的ERRORLEVEL代码的一般问题,而是严格关于成功结果的问题.

有些帖子如何将ERRORLEVEL重置为零的最简单方法是什么?Windows批处理文件:.bat vs .cmd?给出部分答案.但我从未见过全面的清单.

注意: 多年来我一直很好奇.所以我最终决定进行一系列实验并得出一个明确的答案.我发布此问答来分享我发现的内容.

cmd batch-file errorlevel

21
推荐指数
1
解决办法
3623
查看次数

内部cmd.exe命令设置的ERRORLEVEL值是什么?

ERRORLEVEL是大多数cmd.exe命令在根据一系列条件结束更改时返回的值,因此知道命令返回的值是有助于编写更好的批处理文件的有用信息.所有外部.exe程序在结束时都会更改ERRORLEVEL(这是ExitProcessTerminateProcess Win-32 API函数的固有机制),并且通常记录这些值,但内部 cmd.exe命令返回的值在其他地方没有完整记录.

此问题中出现具有部分ERRORLEVEL值的,但仅适用于成功时设置ERRORLEVEL = 0的内部命令.我建议OP这样的问题修改它,以便也包括"不成功的命令"返回的值,但他拒绝并邀请我发布我自己的问题/答案,所以在这里!必须注意的是大于零的不同ERRORLEVEL并没有必然意味着该命令失败!有些命令以无错误结束并返回大于零的值以指示不同的"退出状态",包括内部命令(如SET /P).

为了更好地使用Batch .bat文件中的内置cmd.exe命令,我们需要知道它们返回的ERRORLEVEL值以及此管理中涉及的机制.所以问题是,哪个内部cmd.exe命令将ERRORLEVEL设置为任何值(包括零)?

cmd batch-file errorlevel

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

使用"EXIT/BX"退出批次,其中X> = 1,就像使用&&或||时命令成功完成一样 批量调用之间的运算符

我正在尝试使用该EXIT /B X命令链接一系列.bat文件以返回成功或失败,&&以及||有条件地运行下一个.bat(例如a.bat && b.bat).

无论我是打电话EXIT /B 0还是其他任何结束a.bat,a.bat && b.bat都会在之后拨打b.bat.我的理解是EXIT /B 0应该设定ERRORLEVEL=0,这是成功,所以&&应该继续.与此相对应的是,调用EXIT /B 1应该设置ERRORLEVEL=1哪个失败,所以&&应该停止.我在这里错过了什么?

琐碎的例子:

对于非批处理命令,按预期执行:

C:\> echo test|findstr test>NUL && echo yes
yes

C:\> echo test|findstr test>NUL || echo yes

C:\> echo test|findstr nope>NUL && echo yes

C:\> echo test|findstr nope>NUL || echo yes
yes
Run Code Online (Sandbox Code Playgroud)

使用EXIT /B始终将a.bat视为成功:

C:\> echo @EXIT /B 0 > …
Run Code Online (Sandbox Code Playgroud)

windows cmd batch-file exit errorlevel

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

System.exit(num)或从main抛出RuntimeException?

我有一个单线程应用程序,如果出现问题,应将DOS错误级别设置为非零值.抛出RuntimeException或使用System.exit(非零)更好吗?我不需要堆栈跟踪,我不希望这个应用程序被扩展/重用.这两个选项有什么区别?

java exception-handling errorlevel

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

SignTool.exe错误后,Visual Studio中的PostBuild事件失败

我们在Visual Studio 2010中有一个项目,它在后期构建事件中运行批处理文件.该批处理从Microsoft SDK调用signtool.exe来对二进制文件进行签名和时间戳.

然而,时间戳服务器(我们使用http://timestamp.verisign.com/scripts/timstamp.dll)由于某种原因往往不可靠,有时会失败.这导致构建失败.

我们实现了更高级的批处理脚本(基于代码),拆分签名和时间戳,并允许重试时间戳操作(如果失败).

以下是批处理脚本(signfile.bat)的简化版本:

@echo off

REM sign the file...
signtool.exe /f Authenticode.pfx /p PASS %1

if %errorlevel% neq 0 exit /b %errorlevel%

set timestamp_server=http://timestamp.verisign.com/scripts/timstamp.dll

for /L %%a in (1,1,10) do (

    REM try to timestamp the file...
    signtool.exe timestamp /t %timestamp_server% %1

    if errorlevel 0 if not errorlevel 1 GOTO succeeded

    REM wait 2 seconds...
    ping -n 2 127.0.0.1 > nul
)

REM return an error code...
echo signfile.bat exit code is …
Run Code Online (Sandbox Code Playgroud)

build-process code-signing visual-studio-2010 errorlevel timestamping

15
推荐指数
1
解决办法
8708
查看次数