2014-06-12 3 views
0

그래서 내 일괄 처리 코드는 하나씩 숫자 문자열을 출력합니다. 제 문제는 첫 번째 편지에 갇혀있는 것 같습니다. 나는 (나는) 문자열의 첫 번째 숫자를 제거하는 조작 명령을 가지고 있지만 작동하지 않는 것 같습니다. 예를 들어 info.txt가 12345678이 될 것입니다 경우 : 루프가 phd443322 댓글 1for 루프에서 변수 조작

:floop 
for /F %%G IN ('TYPE info.txt') DO call :line1 %%G 
goto :end 

:line1 
set /a cnt+=1 
set /a div=%cnt% %% 2 
if %div% == 0 call :line2 %1 
goto :EOF 

:line2 
set ord=%1 
echo %ord% 
pause 

:loop 
pause 
set var=%ord% 
set char=%var:~0,1% 
set var=%var:~1% 
echo %char% 
if NOT %var%==_end goto loop 
goto floop 

:end 
+0

지연된 환경 변수 확장에 대한 도움말을 참조하십시오. 실제로 사용하려면 setlocal 명령을 참조하십시오. – phd443322

답변

0

에 갇혀 얻을 것이다, 당신은 setlocal enabledelayedexpansion
help set 그것으로 조금 간다 조사 할 필요가있다. 여기 msdn blog post (Raymond Chen ?)

내가 원래 문제 설명에 따라 작업 할 수있어 예입니다 :

는 또한 길이이로 전환 여기 MSDN 블로그 게시물을 찾을 수

@echo off 
setlocal enabledelayedexpansion 
:floop 

for /F %%G IN ('TYPE info.txt') DO call :line1 %%G 
goto :end 

:line1 
     set ord=%1 
     echo %ord% 
     set var=%ord% 
:loop 
    pause 
    set char=!var:~0,1! 
    set var=!var:~1! 
    echo !char! 
    if [!var!] == [] goto :end 
goto loop 
:end 
0
:loop 
pause 
set var=%ord% 
set char=%var:~0,1% 
set var=%var:~1% 
echo %char% 
if NOT %var%==_end goto loop 
goto floop 

귀하 첫 번째 문제는이 부분에 있습니다 ^^

ord으로 설정하고 있습니다. 첫 번째 charater에 var; 첫 번째 이후 나머지 부분에 var; ...

:OLD_loop 
pause 
set var=%ord% 
:loop 
pause 
set char=%var:~0,1% 
set var=%var:~1% 
echo %char% 
if NOT %var%==_end goto loop 
goto floop 

char (첫 번째 문자)를 표시 한 후 다시 ord에서 var 설정을 반복하는 것은이 그 문제를 치료해야한다.

하지만 다음 var하지_end을 종료 않는 경우 어떻게되는지 고려해야한다. 결국, var이 비어 될 것이며, cmd는 구문 오류를 호출 라인

if NOT ==_end goto loop 

를 해석하려고합니다.

(당신은

:OLD_loop 
pause 
set var=%ord%_end 
:loop 

코딩이 문제를 해결할 수있다)하지만 - var_end 아래로 트리밍하면 어떻게됩니까? GOTO floop은 파일을 다시 읽습니다. 첫 번째 줄부터 처리하여 결국 var = _end을 찾았습니다. 다시 floop으로 되돌아 왔습니다. 이전에 여기에있었습니다. 잠시 후 cmd는 스택 공간을 모두 소모합니다. 파일을 처리 할 때 서브 루틴이 호출되지만 절대 반환하지 않습니다.