Pertanyaan ERRORLEVEL di dalam IF


Hanya tersandung ke hal yang aneh dengan %ERRORLEVEL% dan ingin melihat apakah ada yang tahu mengapa dan apakah ada cara untuk memperbaikinya. Pada dasarnya, tampaknya seolah-olah perintah dieksekusi di dalam jika laporan tidak mengaturnya %ERRORLEVEL% variabel. Itu ERRORLEVEL (seperti dalam IF ERRORLEVEL 1, yang berbeda dari IF %ERRORLEVEL% EQU 1 ) cek tampaknya masih berfungsi dengan baik meskipun, jadi saya mungkin bisa bekerja di sekitar itu, tapi itu akan tetap bagus untuk dapat mencetak tingkat kesalahan. Untuk debugging atau apa pun.

@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 %ERRORLEVEL%
    )
    IF ERRORLEVEL 3 (
        echo INSIDE_IF2  ERRORLEVEL GREQ 3 %ERRORLEVEL%
    )
)

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

@echo on

Menempatkan itu dalam file batch dan menjalankannya menghasilkan output ini:

C: \ Users \ username \ Documents \ work> test.bat
      OUTSIDE_IF 1
      'ThisWillSetErrorLevelTo9009ieNotRecognizedCommand' tidak dikenal sebagai perintah internal atau eksternal,       program yang dapat dijalankan atau file batch.
      OUTSIDE_IF 1
      'ThisWillSetErrorLevelTo9009ieNotRecognizedCommand' tidak dikenal sebagai perintah internal atau eksternal,       program yang dapat dijalankan atau file batch.
      INSIDE_IF ERRORLEVEL 9009
      INSIDE_IF2 ERRORLEVEL GREQ 1 9009
      OUTSIDE_IF ERRORLEVEL 1

Artikel yang relevan:


32
2017-12-06 15:27


asal


Jawaban:


Coba gunakan setlocal enabledelayedexpansion pada awal file batch Anda, dan !ERRORLEVEL! di dalam dirimu IF. Ini sepertinya berhasil untuk saya:

@echo off
setlocal enabledelayedexpansion
dir nul
echo %ERRORLEVEL%
if .1.==.1. (
  urklbkrlksdj - not a command
  echo %ERRORLEVEL%
  echo !ERRORLEVEL!
)

35
2017-12-06 15:45