Как установить переменную, если set / a не удается? - PullRequest
0 голосов
/ 30 сентября 2019

Я хотел бы проверить, не сработал ли мой оператор set / a с ошибкой Missing operator. или нет. Мой текущий командный файл, только устанавливает переменную. Этот пакетный файл предназначался для проверки моей теории проверки, не сработал ли мой оператор set / a с ошибкой Missing operator..

@echo off & @setlocal
set "rndtest=%random% %%2+1"
if "%rndtest%" == "1" set test=1()1
) else (
set test=1+1+1+1+1
)
set "test=1+1+1+1+1+1+1+1+1"
set /a "test_123_abc=%test%"
echo %test_123_abc%

Я пробовал следующее решение, но безрезультатно:

@echo off & @setlocal
set "rndtest=%random% %%2+1"
if "%rndtest%" == "1" set test=1()1
) else (
set test=1+1+1+1+1
)
set /a "test_123_abc=%test%" | find "Missing operator."
if %errorlevel% equ 0 echo Test failed!
) else (
echo Test didn't fail!
)
exit /b 0

Это всегда оценивается как Test didn't fail. Предполагалось, что оно будет оцениваться как одно из двух, но оно всегда оценивается как Test didn't fail.

1 Ответ

1 голос
/ 30 сентября 2019

Если вы используете оператор Set /A и получаете сообщение Missing operator, которое обычно выводится как StdErr, так что это можно легко определить с помощью условных операторов && и ||.

Пример 1 (перенаправление только StdErr) :

Set /A test_123_abc=1()1 2>NUL&&(Echo Test passed.)||Echo Test failed.

Пример 2 (перенаправление как StdErr, так и StdOut) :

Set /A test_123_abc=1()1 >NUL 2>&1&&(Echo Test passed.)||Echo Test failed.

Я перенаправил StdErr на устройство NUL, чтобы предотвратить возвращение любого сообщения об ошибке, и использовал условные обозначения && для представления успешного возврата предыдущей директивы и || для представления неудачного возврата предыдущей директивы.

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