相关疑难解决方法(0)

批处理文件 - 错误处理

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

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

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

batch-file

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

从批处理文件中获取错误代码

我有一个运行几个可执行文件的批处理文件,我希望它在成功时退出,但如果退出代码<> 0则停止.我该怎么办?

windows batch-file exit-code

37
推荐指数
3
解决办法
5万
查看次数

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万
查看次数

检查进程是否使用批处理文件返回0

我想用批处理文件启动一个进程,如果它返回非零,则执行其他操作.我需要正确的语法.

像这样的东西:

::x.bat

@set RetCode=My.exe
@if %retcode% is nonzero
   handleError.exe
Run Code Online (Sandbox Code Playgroud)

作为奖励,您可以考虑回答以下问题,请:)

  • 如何用复合语句写if
  • 如果应用程序My.exe无法启动因为某些DLL丢失,我的工作是否正常?如果没有,我怎么能检测到My.exe无法启动?

windows process batch-file exit-code

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

Windows中的文件重定向和%errorlevel%

假设我们想要使用以下命令在Windows中创建一个空文件:

type nul > C:\does\not\exist\file.txt
Run Code Online (Sandbox Code Playgroud)

目录不存在,所以我们得到错误:

The system cannot find the path specified
Run Code Online (Sandbox Code Playgroud)

如果你打印%errorlevel%输出是:

echo %errorlevel%
0
Run Code Online (Sandbox Code Playgroud)

但命令没有成功!

我注意到,%errorlevel%如果你使用重定向,窗口不会设置最后一个命令.

有没有解决的办法?

windows error-handling batch-file io-redirection

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

为什么我不能在Windows 7上访问名为__CD__的变量?

注意 - 此问题基于在Windows 7上观察到的行为.我认为该行为适用于从Vista开始的所有其他版本.基于MC ND的答案和Foxidrive的评论,它不适用于XP.

我可以使用伪动态变量%CD%来获取当前目录,而不是尾随\.如果我定义一个名为CD using的真实变量set "CD=someValue",则%CD%返回我指定的值,而不是当前目录.

一个鲜为人知的动态变量是%__CD__%相同的%CD%,除了它包括尾部\.但是,如果我这样做set "__CD__=someValue",我无法访问我指定的值!我可以set __CD__看到我的变量存在我的指定值,但%__CD__%总是返回当前目录!

有没有人知道这个%__CD__%机制是如何工作的(为什么它与任何其他动态变量不同)?

有人能想出一种方法来__CD__使用标准批处理命令(不解析输出set __CD__)来访问我的变量吗?

这更像是一个学术问题,而不是一个实际问题.没有人应该定义名称与动态变量匹配的变量.


我不希望解析结果的例程的原因set __CD__是因为值可以在其中包含换行符.有人可以定义两个变量,__CD__或者__CD__2,或者他们可以定义__CD__一个包含换行后跟的值__CD__2=....要区分这两种情况是不可能的.(正如我所说,这是一个学术问题,而不是一个实际问题!)

batch-file environment-variables windows-7

14
推荐指数
3
解决办法
2368
查看次数

批量转到丢失错误级别

考虑以下bat,test.bat(PC01关闭):

mkdir \\PC01\\c$\Test || goto :eof
Run Code Online (Sandbox Code Playgroud)

如果我从命令shell运行该bat:

> test.bat || echo 99
> if ERRORLEVEL 1 echo 55
Run Code Online (Sandbox Code Playgroud)

输出只有55.没有99.有一个错误级别,但||操作员没有看到它.

如果我用那个蝙蝠跑 cmd /c -

> cmd /c test.bat || echo 99
> if ERRORLEVEL 1 echo 55
Run Code Online (Sandbox Code Playgroud)

输出为空白.Errorlevel为0.

如果我删除了|| goto :eof,一切都按照人们的预测 - 即输出即可

99 55

有谁知道为什么这种半生半熟的ERRORLEVEL行为正在发生?

windows cmd batch-file

12
推荐指数
1
解决办法
4987
查看次数

什么是抛出main的异常的C#程序的退出代码?

在C#程序中,当抛出异常时定义的退出代码是main什么?我知道您可以通过多种方式设置退出代码,如此优秀答案中所述.但是我很惊讶我找不到退出 main时抛出异常的退出代码值的文档.是否有一个标准定义退出代码在这种情况下的价值,或者它取决于操作系统(或机会,或其他任何东西)?

c#

7
推荐指数
1
解决办法
1438
查看次数