If you want to use delayed environment variable expansion and command extensions in a batch script, here’s a batch script that functions as a useful cheat sheet for setting, detecting and using them:
@ECHO OFF
IF “%1″ == “TEST_EOF” (
GOTO :EOF
) ELSE IF “%1″ == “TEST_EXPANSION” (
SET extensions=enabled
IF “!extensions!”==”enabled” (
ECHO Delayed environment variable expansion = ON
) ELSE (
ECHO Delayed environment variable expansion = OFF
)
) ELSE IF “%1″ == “TEST_EXTENSIONS” (
:: CALL :label is not available if test extensions are disabled.
CALL %0 TEST_EOF 2>nul
IF NOT ERRORLEVEL 1 (
ECHO Command extensions = ON
) ELSE (
ECHO Command extensions = OFF
)
) ELSE (
ECHO == Default ==
CALL %0 TEST_EXPANSION
CALL %0 TEST_EXTENSIONS
ECHO.
ECHO == Enabled ==
SETLOCAL ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
CALL %0 TEST_EXPANSION
CALL %0 TEST_EXTENSIONS
ENDLOCAL
ECHO.
ECHO == Disabled ==
SETLOCAL DISABLEDELAYEDEXPANSION DISABLEEXTENSIONS
CALL %0 TEST_EXPANSION
CALL %0 TEST_EXTENSIONS
ENDLOCAL
)
(download the script here).
Here’s the output of a run on my machine:
== Default ==
Delayed environment variable expansion = OFF
Command extensions = ON
== Enabled ==
Delayed environment variable expansion = ON
Command extensions = ON
== Disabled ==
Delayed environment variable expansion = OFF
Command extensions = OFF


Leave a Comment