我有一些代码,我希望使用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
循环取出并将其作为单独的批处理文件任何人都可以告诉我这是如何 - 或必须 - 解决的?
答案 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的答案可能会更好地适应问题。