2014-07-08 1 views
0

나는 잠시 동안 쓴 조건문에 약간의 문제가있다.더 이상 올바르게 평가되지 않는 조건문?

if ($select -gt 0 -and $select -le $numfiles){...}else{...} 

이 어떻게 해야하는 모든 선택 $, 사용자의 입력을 받아, 현재 디렉토리에있는 파일, $ numfiles의 수를 비교합니다.

디버거를 체크인했는데 두 변수 모두 값을 받는다는 것을 알았습니다. 내가 실행중인 인스턴스에서, 그것은 사실로 evaulate해야합니다.

$select = 2 
$numfiles = 11 
$select -gt 0 -and $select -le $numfiles 
True 

는 그러나 그것은 달 이상 문제가되지 않았기 때문에 선택 $하지 않는 것은, 내가 변경된 내용을 잘 모르겠어요 1.

같다, false로 평가합니다.

+0

및 '$ select'의 값, 변수에 값이 어떻게 할당되어 있습니까? –

+0

$ select는 다음과 같이 read-host에서 값을받습니다. $ select = read-Host '단순화 된 복사본을 생성 할 파일을 선택하십시오.' – antonz

+0

내 대답이 아래에 수정되었습니다 .ToInt32()와 혼동되어서 죄송합니다. –

답변

0

변수가 올바른 데이터 유형으로되어 있는지 확인

$select.GetType().name 
$numfiles.GetType().name 

그 중 하나는 문자열과 같이 [INT]로 캐스팅하는 경우 :

은 실제의 형태 무엇
$select -as [int] -gt 0 -and $select -as [int] -le $numfiles 
+0

그냥 $ cast를 캐스팅했는데 이제 작동합니다. 나는 그것이 매우 이상하다고 생각한다. 내가 처음 썼을 때 한 달 전에 변했을 가능성이있는 것은 무엇일까? 해당 문을 포함하는 특정 함수는 이후 수정되지 않았습니다. – antonz

+0

다음은 어떻게 작동하는지 믿습니다 : $ select를 비교하는 변수는 [string]이므로 powershell은 $ numfiles.ToString()을 캐스팅합니다. Becouse $ select는 단 하나의 문자이며 $ numfiles의 첫 번째 문자 인 1과 비교됩니다. 2 -le1 = 거짓. –

+0

$ numfiles는 아마도 2 ~ 9 사이 였고 이번 달에는 10보다 커졌습니다. –

0

두 표현식이 개별적으로 평가되도록하려면 괄호로 묶어 두는 것이 좋습니다.

if (($select -gt 0) -and ($select -le $numfiles)){...}else{...} 
+0

'-gt'와'-le' 때문에 문제가되어서는 안됩니다. '-and'보다 [높은 우선 순위] (http://technet.microsoft.com/en-us/library/hh847842.aspx)가 있습니다. –

+0

이론에 동의하지 않아야합니다. –

+0

시도해 보았습니다. 여송연이 없습니다. – antonz