2017-06-22 4 views
1
if ((Get-ChildItem "I:\temp").Length -ne 0) { 
    $locations = (Get-Item "I:\temp"), (Get-ChildItem "I:\temp" -Directory -Recurse) | % { 
     Get-ChildItem -File $_.FullName | 
      Select-String -List -Pattern '^\d{3}-?\d{2}-?\d{4}$' | 
      % Path 
    } 

    if ($locations) { 
     $locations | Out-File "I:\temp\SSN_FILES.txt" 
    } else { 
     Get-ChildItem "I:\temp" -Exclude "fullpath.txt", "SSN_FILES.txt" | Remove-Item 
    } 
} 

$locationsが真であるかどうかを判断する必要があります。 trueの場合は最初の操作を実行し、falseの場合は2番目の操作を実行します。私が実行している問題は、$locationsが真である(一致する正規表現に等しい)かどうかを判断する方法が見つからないことです。変数が同等のステートメントを返すかどうかを判断する方法

+0

'($箇所)であれば... 'テスト:

はこれを行います。おそらく '-match'演算子を見てみるべきです([' Get-Help about_Comparison_Operators'](https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/)。 about/about_comparison_operators))。 –

+0

[関連](https://blogs.msdn.microsoft.com/powershell/2006/12/24/boolean-values-and-operators/)。 –

答えて

2

変数が存在する場合、iftrueを返し、偽でない値(必ずしも真ではなく、ある値)に設定されています。それは `$ null`なのでまたはゼロ、または同等だかどうかを確認するために

if($locations -eq $true){ # to check it is set to the boolean true 
if($locations -ne $null){ # to check if it contains a value 
+0

私は前にそれを持っていたと私はそれが動作するとは思わない。理由は、私は$場所がブールステートメントを返すとは思わない。私は前にこれを持っていたし、私が意図した通りに働いているとは思わない。 – schnipdip

+0

ファイルへの出力は 'True'です。 '$ locations'は、正規表現に等しいファイルへのパスを持つべきです。 – schnipdip

+0

おそらくあなたが行っているテストは '$ locations -ne $ null'ですか?それが値を含んでいるかのように、nullでなくてはなりません。正規表現によって返された値がない場合、nullにする必要があります。 – gms0ulman

関連する問題