DO /L and quoted arguments?

  • This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.
Aug 23, 2010
110
2
#1
I just stumbled upon a problem. I wanted to process some strings passed as parameters, but the result was somewhat unexpected.
I've reduced the issue to this Simple Test Case:
Code:
SET i=0
DO EXT IN /L .sh ".bad sh"
  SET i=%@EVAL[%i+1]
  IFF "%@LEFT[1,%[EXT]]" == "." THEN
    ECHO "%[EXT]"
  ENDIFF
ENDDO
ECHO Did %i runs.
Contrary to the expectation, the cycle runs 3 times and only display one extension. (The latter is not actually suprising, considering the former.)

Is this considered normal behavior?
 

samintz

Scott Mintz
May 20, 2008
1,229
11
Solon, OH, USA
#2
The parameters following DO x IN /L are strings, not filenames. Each parameter will be assigned in sequence, from left to right, to the loop control variable on consecutive passes through the loop. /L will not treat double quotes as delimiters; use /Q if you want to pass arguments with embedded white space.
Code:
do e in /l .sh ".bad sh" (echo %e)
.sh
".bad
sh"

do e in /q .sh ".bad sh" (echo %e)
.sh
".bad sh"
 
Aug 23, 2010
110
2
#3
There's no /Q option for TCC/LE
Code:
[~\Documents\Bugs\TCC]$ "do-_Q-stc.btm"

TCC LE  14.00.9 x64   Windows 7 [Version 6.1.7601]
Did 0 runs.
And RT doesn't unquote parameters.
 
Aug 23, 2010
110
2
#6
Yes, I know. It's just extra work when I already explicitly know that paramerets may have been quoted.
And it is @UNQUOTES[] rather than @UNQUOTE[], since the latter destroys inner quoting of the string.