It looks like the | is used after each do (XXX) statement to bring the next FOR command online before it goes to the next item in computer_list.txt.
Not quite. Nesting FORs is much like creating loops within loops, each with its own defined variable(s). Your first FOR sets up a loop to read the Computer_List file one record at a time. Each record (computername) is fed into a PING command (that's the purpose of the | aka: a pipe). The PING then pings a computer by name and returns an IP address, which the next FIND will parse according to the rules setup by the preceeding FOR. At this point you have a computername and an IP address. Next up, you take the computername and pass it to NBTSTAT, which returns a boatload of output and again, you go thru and search for "MAC Address". When it's found, the preceeding FOR has setup the parsing rules, and you can extract the the MAC address which is assigned another variable. Finally, you have variables (%%a, %%k, and %%y) with info you want, and output them to a file. The closing parens just close each FOR loop and it's back to the beginning to get another computername.
When passing data thru the pipe from one command to another, it's easier if you run each command from the command line, check it's output and then setup the parsing rules accordingly. Of course its also a good thing if you know what command produces what output.
Well, I'm sufficently dizzy. I sure hope DOS is not back to the future. But wait, Microsoft's new MSH/Monad is gonna make batch coders wish they never heard of batch language (think: batch
language scripting on steroids).