2017-01-26 15 views
1

私はこの質問が "新しい男の質問"かもしれないが、おそらく論理的な間違いをしたことを知っています。Textfileの特定の文字列を見つける - Powershell

私はテキストファイルを持っており、文字列が含まれているかどうかを検索したいと思います。下図のように私はそれを試してみましたが、それは動作しません:

$SEL = "Select-String -Path C:\Temp\File.txt -Pattern Test" 
if ($SEL -eq $null) 
{ 
    echo Contains String 
} 
else 
{ 
    echo Not Contains String 
} 

答えて

4

私は、これはあなたがやろうとしているものだと思う:あなたの例で

$SEL = Select-String -Path C:\Temp\File.txt -Pattern "Test" 

if ($SEL -ne $null) 
{ 
    echo Contains String 
} 
else 
{ 
    echo Not Contains String 
} 

、あなたが$SELと呼ばれる文字列を定義し、私がチェックしています(あなたが定義した文字列が$nullではないので、もちろん常にfalseに評価される!)Fは$nullに等しい。また

、ファイルにはパターンが含まれている場合、それはのようなものを返します。

C:\Temp\File.txt:1:Test 
$SELが後方にある、 $nullあるとき、現在あなたが Contains Stringをエコーし​​ているため

だから、あなたの-eq-neに切り替えたり、周りのあなたのif/elseコマンドを交換してください。

PowerShellでの説明とすべてのための有用な例のためのチェックSS64cmd


文字列がファイル内に存在するかどうかをチェックする別の方法は、次のようになります。

If (Get-Content C:\Temp\File.txt | %{$_ -match "test"}) 
{ 
    echo Contains String 
} 
else 
{ 
    echo Not Contains String 
} 

が、これはそうではありませんの表示を与えます。ファイル内には、というテキストがあります。このメソッドは、ファイルの内容を最初にGet-Contentsとしている点で異なっています。文字列が存在するかどうかを確認した後で、これらの要素に対して他の操作を実行する必要がある場合に便利です。

+0

それは私のために働くことThx :) –

1

は、すべてのファイルを検索このようなあなたの引用符文字列を変更し、復帰のための正規表現検索および-Quietを使用いけないためsimplematchを使用するブール値をといけない(のためのより良いですパフォーマンス)

if (Select-String -Path C:\Temp\File.txt -Pattern "test" -SimpleMatch -Quiet) 
{ 
echo "Contains String" 
} 
else 
{ 
echo "Not Contains String" 
} 
+2

何が間違っているのか、理由とその理由を説明してください。これは、OPのための良い学習ポイントになります。 – vonPryz

0

以下のスクリプトは、あなたがやりたいことになります。

$SEL = Select-String -Path c:\temp\File.txt -Pattern test 

if($SEL.Length -gt 0) 
{ 
    Write-Host 'Contains String' 
} 
else 
{ 
    Write-Host 'Does not contain String' 
} 

あなたのライン$SEL = "Select-String ..."は、実際に文字列として$SELを宣言 - それはSelect-Stringを実行するためのPowerShellを指示しません。

関連する問題