forked from Mirrors/wine-wine
cmd.exe: Parse parameters in "FOR /F" properly.
We must not remove the quotes from parameters, or strings like "param=value" will get parsed incorrectly. Signed-off-by: Fabian Maurer <dark.shadow4@web.de> Signed-off-by: Alexandre Julliard <julliard@winehq.org>oldstable
parent
d3cd6a3691
commit
e62000c5c0
|
@ -1978,7 +1978,7 @@ static void WCMD_parse_line(CMD_LIST *cmdStart,
|
||||||
anyduplicates |= thisduplicate;
|
anyduplicates |= thisduplicate;
|
||||||
|
|
||||||
/* Extract the token number requested and set into the next variable context */
|
/* Extract the token number requested and set into the next variable context */
|
||||||
parm = WCMD_parameter_with_delims(buffer, (nexttoken-1), NULL, FALSE, FALSE, forf_delims);
|
parm = WCMD_parameter_with_delims(buffer, (nexttoken-1), NULL, TRUE, FALSE, forf_delims);
|
||||||
WINE_TRACE("Parsed token %d(%d) as parameter %s\n", nexttoken,
|
WINE_TRACE("Parsed token %d(%d) as parameter %s\n", nexttoken,
|
||||||
varidx + varoffset, wine_dbgstr_w(parm));
|
varidx + varoffset, wine_dbgstr_w(parm));
|
||||||
if (varidx >=0) {
|
if (varidx >=0) {
|
||||||
|
|
|
@ -1696,6 +1696,16 @@ for /f "tokens=2,2,3*" %%i in ("a b c d e f g") do echo h=%%h i=%%i j=%%j k=%%k
|
||||||
for /f "tokens=3,2,3*" %%i in ("a b c d e f g") do echo h=%%h i=%%i j=%%j k=%%k l=%%l m=%%m n=%%n o=%%o
|
for /f "tokens=3,2,3*" %%i in ("a b c d e f g") do echo h=%%h i=%%i j=%%j k=%%k l=%%l m=%%m n=%%n o=%%o
|
||||||
cd ..
|
cd ..
|
||||||
rd /s/q foobar
|
rd /s/q foobar
|
||||||
|
echo ------ parameter splitting
|
||||||
|
echo forFParameterSplittingFunc "myparam1=myvalue1 myparam2=myparam2" mytest> foo
|
||||||
|
for /f "tokens=1 delims=;" %%i in (foo) do (call :%%i)
|
||||||
|
del foo
|
||||||
|
for /f "tokens=1 delims=;" %%i in ("forFParameterSplittingFunc "myparam1^=myvalue1 myparam2^=myparam2" mytest") do (call :%%i)
|
||||||
|
goto :forFParameterSplittingEnd
|
||||||
|
:forFParameterSplittingFunc
|
||||||
|
echo %~0 %~1 %~2 %~3 %~4 %~5
|
||||||
|
goto :eof
|
||||||
|
:forFParameterSplittingEnd
|
||||||
|
|
||||||
echo ------------ Testing del ------------
|
echo ------------ Testing del ------------
|
||||||
echo abc > file
|
echo abc > file
|
||||||
|
|
|
@ -1222,6 +1222,9 @@ h=%h i=a j=b k=c l=d e f g m=%m n=%n o=%o@or_broken@h=%h i=a j=b k=c l=d e f g m
|
||||||
h=%h i=a j=c k= l= m=%m n=%n o=%o@or_broken@h=%h i=a j=c k= l= m= n=%n o=%o
|
h=%h i=a j=c k= l= m=%m n=%n o=%o@or_broken@h=%h i=a j=c k= l= m= n=%n o=%o
|
||||||
h=%h i=b j=c k= l= m=%m n=%n o=%o@or_broken@h=%h i=b j=c k= l= m= n=%n o=%o
|
h=%h i=b j=c k= l= m=%m n=%n o=%o@or_broken@h=%h i=b j=c k= l= m= n=%n o=%o
|
||||||
h=%h i=b j=c k= l= m=%m n=%n o=%o@or_broken@h=%h i=b j=c k= l= m= n=%n o=%o
|
h=%h i=b j=c k= l= m=%m n=%n o=%o@or_broken@h=%h i=b j=c k= l= m= n=%n o=%o
|
||||||
|
------ parameter splitting
|
||||||
|
:forFParameterSplittingFunc myparam1=myvalue1 myparam2=myparam2 mytest@space@@space@@space@
|
||||||
|
:forFParameterSplittingFunc myparam1=myvalue1 myparam2=myparam2 mytest@space@@space@@space@
|
||||||
------------ Testing del ------------
|
------------ Testing del ------------
|
||||||
deleting 'file'
|
deleting 'file'
|
||||||
errorlevel is 0, good
|
errorlevel is 0, good
|
||||||
|
|
Loading…
Reference in New Issue