如何在batch file中使用嵌套的FOR循环

我有一些代码,我想用FOR循环来处理一组文件。 作为处理文件的一部分,有一个FOR /F循环来读取它,并根据文件名将数据追加到另一个文件中。

为了能够设置输出文件名我有延迟variables扩展设置。

这是代码应该看起来像我原本打算的那样:

 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 

此代码不起作用,因为variables%%a%%b%%c永远不会收到一个值, %%a始终与%%f具有相同的值。

我已经阅读了一些有关这个问题的文章,但不能从他们的工作中提取解决scheme。

我已经尝试了几件事,迄今为止没有工作…

  • 添加一个虚拟的外部循环来显式地创buildvariables%%a%%j
  • 内部FOR循环取出,并使其成为一个子程序
  • 内部FOR循环取出,并使其成为一个单独的batch file

任何人都可以告诉我,这可以 – 或必须 – 解决?

Solutions Collecting From Web of "如何在batch file中使用嵌套的FOR循环"

 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" ,但我认为这是你需要的。

对不起,但对于发布的代码,我没有看到需要延迟扩展。 所有需要的数据都直接从可替换参数中检索

 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的答案将更好地适应问题。