批处理文件 – “批处理文件”中的“FOR”如何工作?

我已经编程了几十种语言20年,但我无法理解“FOR”在Windows cmd shell批处理文件中的工作,无论我尝试多么努力。我读

http://www.amazon.com/Windows-Administration-Command-Line-Vista/dp/0470046163/ref=sr_1_1?ie=UTF8&s=books&qid=1241362727&sr=8-1

http://www.ss64.com/nt/for.html

和互联网上的其他几篇文章,但仍然混淆,无法完成任何事情。

任何人都可以简单的解释一下“FOR”的作用吗?

对于一个更具体的问题,我如何迭代%PATH%变量中的每个路径?
我试过了

rem showpathenv.bat
for /f "delims=;" %%g in ("%PATH%") do echo %%g

这只会显示第一条路径,而不是全部。为什么我做错了什么

最佳答案
没有一个答案实际上有效。我已经设法自己找到解决方案。
这有点黑客,但它解决了我的问题:

echo off
setlocal enableextensions
setlocal enabledelayedexpansion
set MAX_TRIES=100
set P=%PATH%
for /L %%a in (1, 1, %MAX_TRIES%) do (
  for /F "delims=;" %%g in ("!P!") do (
    echo %%g
    set P=!P:%%g;=!
    if "!P!" == "%%g" goto :eof
  )
)

喔!我讨厌批处理文件编程!!

更新

马克的解决方案比较简单,但它不适用于包含空格的路径。这是Mark的一个修改版的解决方案

echo off
setlocal enabledelayedexpansion
set NonBlankPath=%PATH: =#%
set TabbedPath=%NonBlankPath:;= %
for %%g in (%TabbedPath%) do (
  set GG=%%g
  echo !GG:#= !
)

转载注明原文:批处理文件 – “批处理文件”中的“FOR”如何工作? - 代码日志