2012-08-17 2 views
0

필자는 약간의 배치 파일을 작성하여 일부 날짜 계산을 수행합니다.배치 파일에서 월 var를 한 단계 씩 증가시키는 방법은 무엇입니까?

그러나, 나는 사소한 문제가 우연히 발견 한 :

내 달 VAR를 증가하려고 할 때마다, 그것은 단순히 원하는 점진에 VAR를 설정합니다. 코드 :

: How much time should we add? Default is 1 month 
SET timeadd=1 

: Set the date variables to build needed format 
SET YYYY=%date:~-4% 
SET MM=%date:~3,2% 
SET DD=%date:~0,2% 

if not %MM%==12 (
    SET /A MM=MM+timeadd 
    SET changed=1 
) 

선언 후, 오늘 var (8 월 17 일)은 "08"이됩니다.

그러나 if 블록 이후에이 var은 "1"로 변경됩니다.

이 문제를 해결할 수있는 단서가 없지만 변환 문제 (날짜를 문자열로 beeing하고 정수를 덧붙인 시간)라고 생각할 수 있습니다.

+1

하지 않는지 확인해야합니다. 08은 유효한 8 진수가 아니기 때문에 1을 남겨 둡니다. – wmz

+0

그래, 그건 정확히 내가 생각한 것입니다. (그리고 그 동안에 queston에게 물어 본 이후로). 이제 문제가 남아 있습니다. 어떻게 해결할 수 있습니까? 어떤 생각입니까? –

+0

wmz에서 힌트를 얻은 후에 해결책을 찾았습니다 (다시 한 번 고맙습니다). if 문이 문제를 해결하기 전에 다음 코드를 삽입하십시오. % MM % LSS 10 MM 설정! = MM : ~ -1! –

답변

1

로는 선도적 인 0는 8 진수 표시 (단지 최고의 0x 같은 16 진수 표기를 나타냅니다)하지만, 8 진수 번호 체계가 01에서 07로 실행, 그래서 진수에게이 없기 때문에 이런 일이, 코멘트했다 08 또는 09 오히려 그것은 010 및 011

진수 값 8 == 진수 값이 010

진수 값이 9 == 8 진수 011

직접이를 확인하려면 명령 프롬프트에서 다음을 입력합니다 것

c:\>set /a 010 
c:\>set /a 011 

귀하의 출력이 될 것입니다 :

8 
9 

================================= ======

내 솔루션은 단순히 어떤 선도 0 '확인하고 그들을 삭제하는 것입니다.

if "%MM:~0,1%"=="0" set MM=%MM:~-1% 

내가 수행해야하는 모든 mathmatical 마법 ...

set /a MM=%MM% + 1 

를 수행 ... 그리고 필요한 경우 다음 다시 선두 0 년대를 추가합니다.

set MM=0%MM% 
set MM=%MM:~-2% 

는 그냥 12 (이 경우)를 초과하거나 0을 선도 번호가 진수로 취급되기 때문이다 1보다 낮은

관련 문제