2010-07-07 3 views
2

왜 작동하지 않습니까?Windows 배치 파일 수학 괴괴침

마침내 실행 않을 때 그래서 그것이 실행하기 전에 수학을 precomputes 것 같다
1010 
1010 
1010 
1010 
1010 
1010 
1010 
1010 
1010 
1010 
1010 
"----------------------------" 
1010 
1010 
1010 
1010 
1010 
1010 
1010 
1010 
... 

, %curr%가 1010에서 이미 어떻게 할 :

@echo off 

for /l %%i in (0, 1, 100) do (
    for /l %%j in (0, 1, 10) do (
     set /a curr=%%i*10 + %%j 
     echo %curr% 
    ) 
    echo "-----------------------------" 
) 

내가이에서 얻을 출력 그렇게하지 못하게 해?

가 (나중에 그것을 보일 수 있습니다 사람들을 위해) 요하네스 Rössel에서 대답 미리

0 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
"----------------------------" 
11 
12 
... 

감사 :

@echo off 
setlocal enabledelayedexpansion enableextensions 

for /l %%i in (0, 1, 100) do (
    for /l %%j in (0, 1, 10) do (
     set /a curr=%%i*10+%%j 
     echo !curr! 
    ) 
    echo "-----------------------------" 
) 
+0

k, 제 질문에 수정되었습니다. (실제 배치 파일에서 올바르게 /를 사용했습니다) –

답변

5

사용에 의해 확장 지연이 같은 출력을 얻을려고 루프 앞에 다음 행을 넣으십시오.

setlocal enabledelayedexpansion enableextensions 

그런 다음 환경 변수 a %curr% 대신 !curr!입니다.

블록 내의 환경 변수 내용을 변경하고 있습니다. 은 동일한 블록에서 변경된 내용을 다시 사용합니다. 지연된 확장 없이는 작동하지 않습니다. 그 이유는 cmd이 명령어를 구문 분석하는 동안 %foo%과 같은 변수를 확장하기 때문이며 if 또는 for 같은 명령어는 다음에 나오는 블록을 포함하기 때문입니다. 지연된 확장은 원하는 명령을 실행하기 바로 전에 변수를 평가하게합니다.

help set에는 지연된 확장없이 잘못된 점에 대한 설명이 포함되어 있습니다.

+0

굉장! 위대한 작품! 감사! 여기에 다른 사람이 그것을 찾고에 대한 변경 코드입니다 : 이 SETLOCAL enabledelayedexpansion의 enableextensions에 대한/ 을 @echo 리터 %% 전에서 (0, 1, 100)을 수행 ( 에서/ℓ %%의 J (0 , 1, 10) do ( set/a curr = %% i * 10 + %% j echo! curr! ) echo "------------------ ----------- " ) –

+0

grrr ... 좋은 서식을 유지하기 위해 원본 게시물에 추가하겠습니다. –

관련 문제