我正在编写用于部署asp.net解决方案的第一个批处理文件.我一直在谷歌搜索一般的错误处理方法,找不到任何真正有用的东西.
基本上如果出现任何问题我想停下来打印出错的地方.
任何人都可以给我任何指示吗?
我有一个运行几个可执行文件的批处理文件,我希望它在成功时退出,但如果退出代码<> 0则停止.我该怎么办?
只是偶然发现了一个奇怪的事情,%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) 我想用批处理文件启动一个进程,如果它返回非零,则执行其他操作.我需要正确的语法.
像这样的东西:
::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中创建一个空文件:
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 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=....要区分这两种情况是不可能的.(正如我所说,这是一个学术问题,而不是一个实际问题!)
考虑以下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行为正在发生?
在C#程序中,当抛出异常时定义的退出代码是main什么?我知道您可以通过多种方式设置退出代码,如此优秀答案中所述.但是我很惊讶我找不到退出 main时抛出异常的退出代码值的文档.是否有一个标准定义退出代码在这种情况下的价值,或者它取决于操作系统(或机会,或其他任何东西)?