переменная в переменной в пакетном и отложенном расширении - PullRequest
0 голосов
/ 10 июня 2010

Я пытаюсь использовать переменную в переменной в сочетании с отложенным расширением, но все еще не повезло.

SETLOCAL EnableDelayedExpansion
SET ERROR_COMMAND=exit /B ^!ERRORLEVEL^!

Это моя последняя попытка. Я хочу настроить ERROR_COMMAND для вызова при сбое одного из шагов в пакетном файле. Команда должна быть:

IF ERRORLEVEL 1 !ERROR_COMMAND!

или

IF ERRORLEVEL 1 %ERROR_COMMAND%

Дело в том, что я не могу выяснить, как правильно установить переменную ERROR_COMMAND, чтобы ERRORLEVEL оценивался не во время присваивания, а во время оценки переменной

Конечно, я могу копировать и вставлять код по всему пакетному файлу, но использование переменной кажется немного более красивым ...

Любой

Спасибо, Милан

1 Ответ

1 голос
/ 10 июня 2010

Я уверен, что есть много способов сделать это, вот два:

A)

SET ERROR_COMMAND=call echo.errlvl=%%ERRORLEVEL%%

verify failthis 2>nul
%ERROR_COMMAND%

В)

setlocal DISABLEDELAYEDEXPANSION&set "X=!"
call (endlocal&set "ERROR_COMMAND=echo.errlvl=%X%ERRORLEVEL%X%")&setlocal ENABLEDELAYEDEXPANSION

verify failthis 2>nul
%ERROR_COMMAND%

Следует также отметить, что если кто-то установит ERRORLEVEL = foo (в вашем скрипте или «глобально»),% ERRORLEVEL% не будет разрешаться правильно (То же самое относится к% CD% и всем остальным встроенным специальным переменным)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...