是否可以从C#中读取ERRORLEVEL
,以便您可以返回它并在完成后保持不变?
程序启动时似乎Environment.ExitCode
以0开头。该程序始终写入0。
太懒了;没读的人:以下代码不是 我想写的程序,但通过测试证明
Environment.ExitCode
不继承自errorlevel
,%errorlevel%
或任何以前的退出代码,以防万一。
using System;
namespace test {
class Program {
static void Main() {
Console.WriteLine("{0}",Environment.ExitCode);
}
}
}
我的目标是编写一个程序,该程序在成批使用时不会干扰当前的错误级别,因此可以在以后使用。我知道您可以保存它并将其还原到批处理中...
...
command1 with options "or not"
set elsaved=%errorlevel%
my_cs_program run without telling it which errorlevel is
REM Damn, I cleared errorlevel, thank science I saved it before
call :setel %elsaved%
...
goto :eof
:setel
exit /b %1
...但是很麻烦。如果调用仅保留错误级别,那就更好了。
...
static void Main() {
...
var parent_cmd_errorlevel=exotic_funtion();
...
Environment.ExitCode = parent_cmd_errorlevel;
...
这样,我不必在批处理中考虑它。
tl; dr :是否可以将C#程序透明写入错误级别?如果不是使用C#,是否还有其他语言?哪一个更笼统地说:cmd.exe子进程可以获取其父级的错误级别吗?也许wmic
会有所帮助吗?
致拒绝投票者 / 重复投票者:我知道如何指定.NET中控制台应用程序的退出代码< / em>:
...
static void Main() {
...
Environment.ExitCode = whatever;
...
或
...
static int Main() {
...
return(whatever);
...
我错了吗?如果您对此问题不感兴趣,请不要理会该问题,但AFAIK尚未在SO或另一个SE KB中被询问。
答案 0 :(得分:0)
您无法从上一个程序读取ERRORLEVEL,但可以将其作为参数传递,然后再次进行设置:
class Program
{
static void Main(string[] args)
{
Environment.ExitCode = int.Parse(args[0]);
}
}
然后按如下所示在批处理中调用它:
cd "some path that returns an error"
.\Console1App.exe %errorlevel%
REM Print the error code of the cd command
echo %errorlevel%
请注意,这仅在未设置%errorlevel% environment 变量的情况下有效。 CMD的工作方式是,当未设置%errorlevel%时,它将通过实际的错误级别作为回退