2012-11-21 168 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! 

的答案沒有人給我正確的結果至今...

回答

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'循環來做,就像這樣:'for %% a in(!bla!)do set/a bla = %%〜a + 0'。 –

+0

@EitanT你是對的。當變量可以爲空(「」)或不帶引號時,使用for對於一般情況更安全。由於我的答案被選中,我編輯它。 –

0

您正在使用不正確的blackquotes的當設置一個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!它說失蹤的運營商。沒有/它不會給出任何錯誤,但不會做我想要的。 – theGD

1

這對我的作品

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

無需報價或延遲擴展。

+0

是的,它的作品。然而在我的情況下,bla和zzz變量是通過解析一個字符串返回的,所以它們也是字符串。如果我直接比較它們,那麼我的問題顯示的是什麼。 – theGD