with run program make how example create commands batch bat batch-file errorlevel

batch-file - run - how to use batch file



ERRORLEVEL dentro de IF (1)

Intente usar setlocal enabledelayedexpansion al comienzo de su archivo por lotes, y !ERRORLEVEL! dentro de tu IF . Esto parece funcionar para mí:

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

Acabo de tropezar con algo raro con %ERRORLEVEL% y quería ver si alguien sabe por qué y si hay alguna forma de solucionarlo. Básicamente, parece como si los comandos ejecutados dentro de sentencias if no configuraran la variable %ERRORLEVEL% . El ERRORLEVEL (como en IF ERRORLEVEL 1 , que es diferente de IF %ERRORLEVEL% EQU 1 ) check parece que todavía funciona bien, así que probablemente pueda evitarlo, pero aún así sería bueno poder imprimir el nivel de error . Para la depuración o lo que sea.

@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

Poner eso en un archivo por lotes y ejecutarlo produce este resultado:

C: / Users / username / Documents / work> test.bat
OUTSIDE_IF 1
''ThisWillSetErrorLevelTo9009ieNotRecognizedCommand'' no se reconoce como un comando interno o externo, programa operable o archivo por lotes.
OUTSIDE_IF 1
''ThisWillSetErrorLevelTo9009ieNotRecognizedCommand'' no se reconoce como un comando interno o externo, programa operable o archivo por lotes.
INSIDE_IF ERRORLEVEL 9009
INSIDE_IF2 ERRORLEVEL GREQ 1 9009
OUTSIDE_IF ERRORLEVEL 1

Artículos relevantes: