2013-09-04 3 views
0

사용자가 빈 문자열을 포함 할 수없는 파일 이름을 지정해야하는 함수를 만들려고합니다. 그 외에도 문자열에는 점이 포함될 수 없습니다. 이 함수를 실행하면 예를 들어 "test"를 입력 할 때 루핑을 계속합니다. 왜 그런가?내보내기 함수

감사합니다.

Function Export-Output{ 
    do{ 
     $exportInvoke = Read-Host "Do you want to export this output to a new .txt file? [Y/N]" 
     }until($exportInvoke -eq "Y" -or "N") 

      if($exportInvoke -eq "Y"){      
       do { 
        $script:newLog = Read-host "Please enter a filename! (Exclude the extension)" 
         if($script:newLog.Length -lt 1 -or $script:newLog -match ".*"){ 
         Write-Host "Wrong input!" -for red 
         } 
        }while ($script:newLog.Length -lt 1 -or $script:newLog -match ".*") 


       ni "$script:workingDirectory\$script:newLog.txt" -type file -value $exportValue |out-null 
      } 

    } 

편집 : 관련 메모에

:

do{ 
    $exportInvoke = Read-Host "Do you want to export this output to a new .txt file? [Y/N]" 
    }until($exportInvoke -eq "Y" -or "N") 

나는 단순히 읽기 호스트를 우회 Enter 키를 눌러 수있는 코드의 다음 라인을 사용

. "Y" -or "N"을 간단히 "Y"으로 바꿀 때 그렇지 않습니다. 왜 이런 일이 벌어지고 있는지에 대한 생각은?

답변

2

정규식 대하여 -match 운영자 확인되므로이 : 파일명이 개행 (.) 0 회 이상 제외한 charachter (*)이 포함되어있는 경우

$script:newLog -match ".*" 

하여 테스트된다. 이 조건은 항상 true가되므로 무한 루프가 생성됩니다. 리터럴 점을 테스트하려면

, 당신은 그것을 탈출해야합니다

다른 질문에 대해서는
$script:newLog -match '\.' 

, 당신이 오해하고 어떻게 논리 및 비교 연산자 작업을. $exportInvoke -eq "Y" -or "N"$exportInvoke -eq ("Y" -or "N")을 의미하지 않으며, 즉 변수는 "Y"또는 "N"과 같습니다. 의미는 ($exportInvoke -eq "Y") -or ("N")입니다. "N"이라는식이 evaluate to zero이 아니기 때문에 PowerShell에서는이 값을 $true으로 해석하므로 조건은 항상 ($exportInvoke -eq "Y") -or $true이됩니다. 이는 항상 true입니다. 이에 조건을 변경해야

$exportInvoke -eq "Y" -or $exportInvoke -eq "N" 
+0

좋아을 많이하는 데 도움이 . 나는 또 다른 작은 관련 질문에 대한 메인 포스트를 편집했다. 그걸 보시 겠어? –

+0

@ user2744349 업데이트 된 답변보기 –

+0

많이 감사하겠습니다. 좋은 읽을 거리에 대해서는 ... 솔직히 말해서 "N"이 $ true가되는 이유를 확실히 알 수는 없지만 알아낼 것입니다. –

1

사용이 사용자의 입력 테스트 :.

!($script:newLog.contains('.')) -and !([String]::IsNullOrEmpty($script:newLog)) -and !([String]::IsNullOrWhiteSpace($script:newLog))

귀하의 정규 표현식 (-match ".*"은 기본적으로 모든 것에 일치한다

관련 문제