FOR %%N IN (hello bye) DO (
It seems that the variable "first" is always 0. Why?
With batch files, variables are expanded when their command is read - so that would be as soon as the
for executes. At that point, it no longer says
echo %first%, it literally says
echo 0, because that was the value at the point of expansion.
To get around that, you need to use delayed expansion by surrounding your variable name with
! instead of
% - so that would be
echo !first!. This may require you to start cmd.exe with the /V parameter, or use
setlocal enabledelayedexpansion in the beginning of your batch file (just after
If you type
set /?, you'll see a much more detailed explanation of this at the end of the output.