title: Why FOR /F sets empty values for repeated numbers in the rest of tokens?
body: <p>Not sure if the question is clear enough so here's an example:</p>
  
  <pre><code>:::this prints - 1:[i] 2:[] 3:[] 4:[] 5:[] 6:[] 7:[]
  for /f "tokens=1,1,1,1,1,1,1" %%a in ("i ii iii iv v vi vii") do (
      @echo 1:[%%a] 2:[%%b] 3:[%%c] 4:[%%d] 5:[%%e] 6:[%%f] 7:[%%g]
  )
  
  :::this prints - 1:[i] 2:[ii] 3:[iii] 4:[iv] 5:[] 6:[] 7:[%g]
  for /f "tokens=2,3,1-4" %%a in ("i ii iii iv v vi vii") do (
      @echo 1:[%%a] 2:[%%b] 3:[%%c] 4:[%%d] 5:[%%e] 6:[%%f] 7:[%%g]
  )
  
  :::this prints - 1:[i] 2:[ii] 3:[iii] 4:[] 5:[] 6:[] 7:[%g]
  for /f "tokens=1-3,1-3," %%a in ("i ii iii iv v vi vii") do (
      @echo 1:[%%a] 2:[%%b] 3:[%%c] 4:[%%d] 5:[%%e] 6:[%%f] 7:[%%g]
  )
  </code></pre>
  
  <p>In brief if there's a repeated numbers in the list of tokens (doesn't matter if they are in the ranges like <code>n-m</code> or set one by one with commas ) the same number of the left accessed tokens have empty values.</p>
  
  <p>Nowhere this behavior is documented (or at least I didn't found such thing).Here's <code>FOR</code> help that concerns tokens:</p>
  
  <pre><code>tokens=x,y,m-n  - specifies which tokens from each line are to
                    be passed to the for body for each iteration.
                    This will cause additional variable names to
                    be allocated.  The m-n form is a range,
                    specifying the mth through the nth tokens.  If
                    the last character in the tokens= string is an
                    asterisk, then an additional variable is
                    allocated and receives the remaining text on
                    the line after the last token parsed.
  </code></pre>
  
  <p>This is testes on Win8x64 so I'm not even sure this will happen on all the range of Windows machines.</p>
  
  <p><strong>EDIT:</strong>  Despite the accesible tokens are limited to 31 with this I can create more empty tokens :</p>
  
  <pre><code>setlocal disableDelayedExpansion
  for /f "tokens=1-31,1-31,1-31" %%! in (
  "33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 "
  ) do (
   echo 1:[%%!-!]  30:[%%?-?] 31:[%%@-@] 32:[%%A-A] 33:[%%B-B] 34:[%%C-C] 35:[%%D-D] 36:[%%E-E] 37:[%%F-F] 38:[%%G-G] 90:[%%{-{] 
  )
  </code></pre>
  
  <p>edit. the maximum of the empty tokens is 250 (not sure how the extended ascii characters will be displayed between 0x02 and 0xFB):</p>
  
  <pre><code>@echo off
  for /f "tokens=1-31,1-31,1-31,1-31,1-31,1-31,1-31,1-31,1-31,1-31,1-31,1-31,1-31,1-31,1-31" %% in (
  "1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1") do (
      echo 0x02-%%- 0x07-%%- 0xFE-%%ю-  0xFB-%%ы- 0xFA-%%ъ- 
  )
  </code></pre>