2012-11-21 7 views
1

나는이 있습니다문자열을 정수와 비교하는 방법은 무엇입니까?

@echo off 
setlocal ENABLEDELAYEDEXPANSION 
set bla="-666" 
set zzz="333" 
if !zzz! LSS !bla! echo lesser 
pause 

이 잘못되는 날 "작은"제공합니다. 나는 ASCII 값 때문에 이것이라는 것을 알고있다. 그러나 마치 숫자 인 것처럼 그들을 비교하는 방법은 무엇입니까?

편집 :

좀 더 코드 : 답변의

set mn=99999 
for /f "tokens=1-9" %%a in (%%g) do (
set zzz=%%d 
) 
if "!zzz!" LSS "!mn!" set mn=!zzz! 

없음 아래 당신은 blackquotes의 잘못된 사용을 복용하는 나에게 올바른 지금까지 결과 ...

답변

0

인용구를 삭제하고 비교하는 것은 저에게 효과적입니다.

@echo off 
setlocal ENABLEDELAYEDEXPANSION 
set bla="-666" 
set zzz="333" 
for %%a in (!bla!) do set /a bla=%%~a+0 
for %%a in (!zzz!) do set /a zzz=%%~a+0 
echo !bla! !zzz! 
if !bla! LSS !zzz! (
    echo lesser 
) else (
    echo greater 
) 
pause 
+0

이것은 따옴표를 제거하는 매우 강력한 방법은 아닙니다 (빈 문자열'bla = ""'). 오히려'for % -a for (! bla!) do/a bla = %% ~ a + 0'와 같이'for'-loop를 사용하여 할 수 있습니다. –

+0

@EitanT 맞습니다. for를 사용하면 변수가 비어 있거나 ("") 따옴표 없이도 일반적인 경우보다 안전합니다. 내 대답이 선택되었으므로 편집합니다. –

0

을주지 않았다 var를 설정할 때 VAR = "CONTENT"는 특수한 경우에만 해당하지만이 경우는 아닙니다.

@echo off 
set /A "bla=-666" 
set /A "zzz=333" 
if %zzz% LSS %bla% echo lesser 
pause 

변수를 묶기 위해 검은 색 인용 부호를 사용 했으므로 내용에 검은 색 인용 부호가 없습니다. 이 같은 번호를 비교했을 때

그리고을 비교 한에 blackquotes를 사용하지 너무 기억

if "%zzz%" LSS "%bla%" echo lesser 
+0

set/A "zzz = %% e"를 사용하면 오류가 발생합니까? – theGD

+0

"실패"하는 의미는 무엇입니까? 비교와 함께 ... 뭐라구? 또는 무엇을? 문자를 설정하려고하면 aritmetic 연산자 (/ A)로만 숫자를 설정할 수 있다는 것을 기억하십시오. 실패하면 숫자가 0이됩니다. – ElektroStudios

+0

어떻게 든 set/a bla =! final을 사용할 수 없었습니다! 누락 된 운영자라고합니다./a 없이는 어떤 오류도주지 않지만 내가 원하는 것을하지는 않습니다. – theGD

1

이 따옴표 또는 지연 확장을위한 저

@echo off 
set bla=-666 
set zzz=333 
if %zzz% LSS %bla% echo lesser 
pause >nul 

필요가 없습니다 작동합니다.

+0

예. 작동합니다. 그러나 내 경우에는 문자열을 파싱하여 bla 및 zzz 변수가 반환되므로 문자열이기도합니다. 제가 직접 비교한다면, 제가하는 일은 제가 제 질문에서 보여준 것입니다. – theGD

관련 문제