mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-27 11:53:32 +00:00
Suppose the following FOR-loop command, to be run from the command-line
(if using a batch file, double each percent '%' sign):
FOR %l IN ("a,b,c,d,e" "f,g,h,i,j") DO (
FOR /F "delims=, tokens=1-3*" %a IN (%l) DO @echo %a-%b-%c-%d
)
The outermost FOR-loop enumerates the two strings "a,b,c,d,e" and
"f,g,h,i,j" (placed in %l), and parse each of these in turn, splitting
them at each specified delimiter (here only one character) ',' and storing
the results in consecutive tokens %a, %b, %c, %d, with the last token %d
containing all the remaining string (non-split).
The expected result is:
a-b-c-d,e
f-g-h-i,j
However, due to the way the delimiters string specified by the "delims="
option is stored (no stack/heap duplication of the FOR-option substring,
but reading from it directly), during the first run of the innermost
FOR-loop, the option string "delims=, tokens=1-3*" was truncated to just
after the ',' due to the erroneous "delims=" parsing, so that when this
FOR-loop ran for a second time (to deal with the second string), the option
string was already erroneously truncated, without the "tokens=..." part,
so that the parsing results were not stored in the tokens and resulting in:
a-b-c-d,e
f-%b-%c-%d
instead. The solution is to save where the "delims=" string needs to be
cut, but wait until running the actual FOR-loop to terminate it (and
saving the original character too), run the FOR-loop body, and then
restore the original character where termination took place. This allows
having the FOR-loop option string valid for the next execution of the
FOR-loop.
ReactOS command line interpreter CMD ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The ReactOS command line interpreter CMD is derived from FreeCOM, the FreeDOS command line interpreter. We are shooting mainly to be just like 2000/XP cmd.exe. They are very close and only a small number(none that i can recall off the top of my head, so maybe 0) differences have been found between those two. It has been reported that ROS cmd.exe does not work on nt4 because of a missing api. I'm hoping to fix this at some point. Compiling ~~~~~~~~~ ROS cmd used to depend on __REACTOS__ to provide two different ways to build cmd. There is still code left in it for this but... The __REACTOS__ = 0 has not been develped, maintained. And therefore it does not even compile anymore. __REACTOS__ = 1 works fine on both windows(nt). and someday i plan to remove all the __REACTOS__ = 0. Using rbuild you can compile cmd separately by "make cmd_install". Also you can compile cmd using MSVC 6 and soon 7/8 hopefully. Current Features ~~~~~~~~~~~~~~~~ - environment handling with prompt and path support. - directory utilities. - command-line history with doskey-like features. - batch file processing. - input/output redirection and piping. - alias support. - filename completion (use TAB), both Bash and Windows-CMD style. Credits ~~~~~~~ FreeDOS developers: [email protected] (Tim Norman) [email protected] (Matt Rains) [email protected] (Evan Jeffrey) [email protected] (Steffen Kaiser) Svante Frey ([email protected]) Oliver Mueller ([email protected]) Aaron Kaufman ([email protected]) Marc Desrochers ([email protected]) Rob Lake ([email protected]) John P. Price <[email protected]> Hans B Pufal <[email protected]> ReactOS developers: Eric Kohl Emanuele Aliberti <[email protected]> Paolo Pantaleo <[email protected]> Brandon Turner <[email protected]> Bugs ~~~~ There are still many bugs ;) Please report bugs to ReactOS team <[email protected]> or to JIRA at www.reactos.org