rem Команда, устанавливающая в 1 errorlevel и результат выполнения (выполнится rem то, что идет после || за ней). rem 8,22 s / 1000000 times set _e=((for /f %%! in () do z)^^^|^^^| (for /f %%! in () do z)) rem Команда, устанавливающая в 1 только errorlevel (не выполнится то, что идет rem после || за ней). rem 11,22 s / 1000000 times set _e'=((for /f %%! in () do z)^^^|^^^| (if 1==2 z)) rem _IsFile rem v2019-12-22_1 rem Возвращает ошибку 0, если объект является файлом, иначе ошибку 1. rem <obj_var> [%%#] Имя переменной, содержащей имя объекта. Не должно rem содержать "!" (непредсказуемый результат при наличии). rem <de_on_flag> [%%$] Флаг "Delayed expansion уже включено" (1 или пусто). rem Установленный флаг ускоряет выполнение макроса, но вернет rem непредсказуемый результат, если delayed expansion на самом rem деле выключено. rem При нарушении совместного доступа ~a возвращает пустую строку. rem Vars used: _A rem Usage on level 1: rem for /f "tokens=1,2 delims==" %%# in ("<obj_var>[=<de_on_flag>]") do %_IsFile% && echo A file || echo Not a file rem Usage on level 2: rem (for /f "tokens=1,2 delims==" %%# in ("<obj_var>[=<de_on_flag>]") do %_IsFile% ^&^& echo A file ^|^| echo Not a file)^& rem Usage on level 2 and deeper: rem (for /f "tokens=1,2 delims==" %%# in ("<obj_var>[=<de_on_flag>]") do %_IsFile:^=^^^% ^^^&^^^& (echo A file) ^^^|^^^| echo Not a file)^^^& set _IsFile=^ (if defined %%# (^ (if _==_%%$ setlocal enabledelayedexpansion) ^^^&^^^& (^ (for /f "delims=*? tokens=2" %%A in ("_!%%#!_") do (^ %_e':^=^^^%^ )) ^^^|^^^| (^ if exist !%%#! (^ (for %%A in ("!%%#!") do set _A=%%~aA)^^^&^ if defined _A if /i "-" neq "!_A:~,1!" %_e:^=^^^%^ ) else %_e:^=^^^%^ )^^^&^ (if _==_%%$ endlocal)^^^&^ if errorlevel 1 %_e:^=^^^%^ )^ ) else %_e:^=^^^%) |