2011-02-01 3 views
2

私はシェル(c:\ windows \ system32 \ cmd.exe)内でスクリプト(.cmd)を実行しています。私が望むのは、コマンドがエラーコードを返すと、.cmdファイルの実行が終了し、cmd.exeが実行を終了し、エラーコードを呼び出したコードにエラーコードが返されることです。cmdファイルとシェルを同時に終了するには?

C:\...\gacutil.exe /i C:\...\x.dll 
if not errorlevel 0 (
    echo Error registering C:\...\x.dll 
    exit %errorlevel% 
) 

をしかし、これは動作しません:

私はこのようなものを使用しています。私はexit/bで試しましたが、私には同じように見えます。何か案が?

+0

同じセッションで実行したバッチスクリプトを使用してシェルの対話セッションを終了することを意味しますか? –

+0

Rigth、私は遠隔地からそのセッションを実行しています。セッションをエラーが発生したコマンドから取得したエラーレベルを返すように、バッチから終了します。 –

+0

私は参照してください。エラーレベルを返す最後の部分は、やや複雑なものです。私はそのセッションを殺すための何らかの方法について考えていましたが、最初にそのPIDを見つける必要がありました。とにかく、あなたは結果を返すことができるように、何か違うものが必要だと思われます... –

答えて

5

これは、彼らが唯一のバッチで使用されるエラーレベルを設定するので、私見出口と出口/ Bが壊れている、アップevery now and thenていますcmd.exeプロセスの終了コードは設定しません。

バッチスクリプトはエラーレベルのチェックを行っている場合、呼び出しは十分です:

REM DoSomeAction.cmd 
@echo off 
call someprogram.exe 
if errorlevel 1 exit /b 

REM MainScript.cmd 
@echo off 
... 
call DoSomeAction.cmd 
if errorlevel 1 (
    ... 
) 

しかし、あなたは& &かを使用したい場合は|| 「正常な」exit /bを使用した構文(myscript.cmd&&someotherapp.exe)またはスクリプトは、あなたが実際に(親プロセスにGetExitCodeProcessで取得)プロセスの終了コードを設定したい、プログラムではなく、別のバッチファイルから起動される

@echo off 
call thiswillfail.exe 2>nul 
if errorlevel 1 goto diewitherror 
... 
REM This code HAS to be at the end of the batch file 
REM The next command just makes sure errorlevel is 0 
verify>nul 
:diewitherror 
@%COMSPEC% /C exit %errorlevel% >nul 

とその後、call myscript.cmd&&someotherapp.exeでそれを呼び出すと仕事をしていますが、cmd.exe /c call yourscript.cmd

+0

ありがとうございます。私はcmd.exe/c myscript.cmdをcallnigし、cmdの中で呼び出しを使用せずに。どうもありがとう –

1

実際にスクリプトを実行しているのはそれだけです。スクリプトが実行されると、サブシェルで実行されるため、exitを呼び出すとそのサブシェルが終了します。しかし、私は、callステートメントを使ってスクリプトを実行すると、そのシェルのコンテキスト内で実行され、サブシェルを実行しないと思います。

ので、スクリプトの使用を実行するための

call <script.cmd> 

だけではなく、

<script.cmd> 
+0

はい、アンダーさんの言葉です。ありがとう。 –

1

あなたは(AB)は、バッチスクリプトモードからこの場合cmd.exe .IN GOTO'sbug when it is with non existent label and negative conditional executionを使用することができるよう、バッチファイルを実行し、すべてのプログラムは、プロセスを作成すると仮定することはできませんコマンドプロンプトモードにして終了することができます:

C:\...\gacutil.exe /i C:\...\x.dll 
if not errorlevel 0 (
    echo Error registering C:\...\x.dll 
    goto :no_such_label >nul 2>&1 || exit %errorlevel% 
) 
関連する問題