Wow! Original npocmaka's code does not work!
==> D:\bat\SO\37639143npocmaka.bat Wow! Original npocmaka's code does not work!
Number of processed arguments: 1
You need to toggle delayed expansion as follows:
SETLOCAL EnableExtensions DisableDelayedExpansion
set argCount=0
for %%x in (%*) do (
set /A argCount+=1
setlocal EnableDelayedExpansion
if !argCount! gtr 3 (
endlocal
echo element after 3 argument %%x
) else endlocal
)
echo Number of processed arguments: %argCount%
Output:
==> D:\bat\SO\37639143.bat Wow! Original npocmaka's code does not work!
element after 3 argument code
element after 3 argument does
element after 3 argument not
element after 3 argument work!
Number of processed arguments: 7
Or, omit delayed expansion at all and modify next code snippet (my unchanged specimen script):
@echo OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
echo(
echo before any shift: all %%* = [%*]
echo(
set /A "ii=0"
echo param %%%ii% = %0
:loopfor
set /A "ii+=1"
echo param %%%ii% = %1
SHIFT /1
if not [%1]==[] goto :loopfor
echo(
echo after %ii% shifts: %%* = [%*]
goto :eof
Output:
==> cliparser.bat Wow! Original npocmaka's code does not work!
before any shift: all %* = [Wow! Original npocmaka's code does not work!]
param %0 = cliparser.bat
param %1 = Wow!
param %2 = Original
param %3 = npocmaka's
param %4 = code
param %5 = does
param %6 = not
param %7 = work!
after 7 shifts: %* = [Wow! Original npocmaka's code does not work!]
==>