如何在批处理文件中使用嵌套的FOR循环

时间:2014-11-23 15:37:07

标签: windows batch-file for-loop nested-loops

我有一些代码,我希望使用FOR循环来处理一组文件。 作为处理文件的一部分,有FOR /F循环读取它并根据文件名将数据附加到其他文件。

为了能够设置输出文件名,我设置了延迟变量扩展设置。

这就是我最初打算使用的代码:

setlocal enabledelayedexpansion
for %%f in (DataFolder\*.Ext) do (
    set POI=%%~f
    set POI=!JbPOI:DataFolder\=!
    set POI=!JbPOI:.Ext=!
    for /f  "tokens=1,2,3 delims=," %%a in ("%%~f") do (
        set CX=%%a
        set CY=%%b
        set FN=%%c
        echo !FN!,9,!CX!,!CY! >> "DataFolder\!POI!.tmp"
    )
)
endlocal

此代码不起作用,因为变量%%a%%b%%c从未收到值,%%a始终与{{1}具有相同的值}。

我已经阅读了一些关于这个问题的文章,但是无法从那些有用的文章中提取解决方案。

我尝试了几件事,到目前为止都没有工作......

  • 添加了一个虚拟外循环,以通过%%f显式创建变量%%a
  • 内部%%j循环取出并使其成为子程序
  • 内部FOR循环取出并将其作为单独的批处理文件

任何人都可以告诉我这是如何 - 或必须 - 解决的?

2 个答案:

答案 0 :(得分:3)

setlocal enabledelayedexpansion
for %%f in (DataFolder\*.Ext) do (
    set POI=%%~f
    set POI=!JbPOI:DataFolder\=!
    set POI=!JbPOI:.Ext=!
    for /f  "useback tokens=1,2,3 delims=," %%a in ("%%~f") do (
        set CX=%%a
        set CY=%%b
        set FN=%%c
        echo !FN!,9,!CX!,!CY! >> "DataFolder\!POI!.tmp"
    )
)
endlocal

我不确定您是否要阅读文件"%%~f",但我认为这就是您所需要的。

答案 1 :(得分:1)

很抱歉,但对于发布的代码,我不认为需要延迟扩展。所有需要的数据都是从for可替换参数中直接检索的

setlocal enableextensions disabledelayedexpansion
for %%f in (DataFolder\*.Ext) do (
  (
    for /f  "usebackq tokens=1-3 delims=," %%a in ("%%~f") do echo(%%c,9,%%a,%%b
  ) > "DataFolder\%%~nf.tmp"
)
endlocal

如果真实代码包含未发布的内容,那么npocmaka的答案可能会更好地适应问题。