2014-11-23 2 views
2

FOR 루프를 사용하여 파일 집합을 처리하려는 일부 코드가 있습니다. 파일을 처리하는 과정에서 파일을 읽는 루프가 FOR /F이고 파일 이름을 기반으로 다른 파일에 데이터를 추가합니다.배치 파일에서 중첩 된 FOR 루프를 사용하는 방법

출력 파일 이름을 설정하려면 변수 확장을 지연 시켰습니다.

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 항상 있습니다

코드가 내가 처음으로 그것을 의도 한대로 모양을합니다입니다 %%f과 같은 값

이 문제에 대한 기사를 읽었으나 효과가있는 솔루션을 추출하지 못했습니다.

내가 몇 가지를 시도

는, 아무도 지금까지 일하지 ...

  • 루프 꺼낸 변수 %%a 명시 적으로
  • 내부 FOR%%j을 만들 더미 외부 루프를 추가하고 그것을 서브 루틴을 만들어
  • 내부 FOR 루프를 꺼내 별도의 배치 파일로 만들었습니다.

아무나 알려주세요. 어떻게 이것이 해결 될 수 있습니까? 아니면 반드시 해결되어야합니까?

+1

가장 쉬운 해결책은 Python을 설치하고 Python 스크립트를 작성하는 것입니다. 또는 MS 배치 이외의 다른 언어. – ThiefMaster

+0

파일'%% ~ f'의 내용을 읽거나 그 이름을 문자열로 사용하고 싶습니까? 지금은 문자열로 사용하고 있습니다. – npocmaka

+0

%% f 파일을 읽어야합니다 ...이 방법으로 문자열로 처리하면 %% a가 항상 %% f와 같은 값을 갖는 이유를 설명하는 것이 좋습니다. 나는 더 많은 테스트를 할 예정이다 ... –

답변

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" 파일을 읽으려면 확실하지 않지만 원하는 내용이라고 생각합니다.

+0

은'useback'이'usebackq'가 아니어야합니까? –

+0

@ Lưuμĩhhhhhc - 둘 다 작동합니다. – npocmaka

+0

방금 ​​문서화되지 않은 솔루션 인 http://ss64.com/nt/for_f.html을 보았습니다. –

1

죄송하지만 게시 된 코드에는 지연된 확장이 필요하지 않습니다. 실제 코드는 무엇인가 게시하지, 문제의 것 더 잘 맞는 npocmaka에서 어쩌면 답을 포함하는 경우 모든 필요한 데이터를 직접

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 

for 교체 매개 변수에서 검색되고있다.

+0

ouput 파일 이름의 일부는 %% f 파일에서 파생됩니다 이름이지만, 완전하지는 않습니다 ... 일부 문자는 제거됩니다. –

+0

@JaapBregman, 네, 경로와 확장자. '%% ~ nf'는 경로가없고 확장자가없는 파일 이름 만 반환합니다. –

+0

힌트를 가져 주셔서 감사합니다! –

관련 문제