2012-02-16 5 views
3

まず、ディレクトリ内のすべてのテキストファイルのディレクトリリストを生成したいと考えています。次に、それぞれのテキストファイルと取得コンテンツを取得します。次に、内容を調べて、最初のファイルと内容を共有している別のディレクトリ内のすべてのテキストファイルを検索し、対応する一致をソースファイルの名前を付けたファイルに出力します。Powershell - ループのトラブル

私はこのすべてで非常に新しいですし、私は知識のいくつかの深刻な基本的なチャンクが不足していることを実感します。私が持っている小さなスクリプトの経験は、Javascriptにありますが、完全に譲渡することはできません。 (プログラミングはプログラミングですが、私は聞いています。)これは私がこれまで持っているものである

$max = get-content h:test1\one.txt | Measure-Object 
$A = get-content h:test1\one.txt 
For($i=0; $i -lt $max.count ; $i++){ 
    select-string h:test2\*.txt -pattern $($A[$i]) | Format-Table | Out-File ($i + '.txt') 
    } 

私のような何かを望んでいる:

$max = get-content $files[i] | Measure-Object 
    $A = get-content files[i] 
    For($j=0; $j -lt $max.count ; $j++){ 
     select-string h:test2\*.txt -pattern $($A[$j]) | Format-Table | Out-File($files[i].basename + $j + '.txt') 
    } 

一切のに役立つだろう非常に、そう

カーティス

を理解さ

本1(one.txt)

フランスの首都はパリです。
パリの人口は12です。

ブック2(two.txt)

フランスは美しい国です。
フランスの首都はパリです。

私は基本的に、two.txtがone.txtと行を共有しているという報告をしたいと思います。

+0

あなたは共有コンテンツを言うとき、あなたは同じファイルを意味しますか?あるいは、彼らのコンテンツの一部に共通点があるということだけですか? – EBGreen

+0

内容の一部が共通していること。 –

+0

だからフルラインのマッチングで十分でしょうか? – EBGreen

答えて

2

OKのは、これを打破してみましょう:

まず私は、ディレクトリを生成したいと思いますディレクトリ内のすべてのテキストファイルのリスト。次に、それぞれのテキストファイルと取得コンテンツを取得します。

dir *.txt | get-content 

は、それから私は内容を通過し、最初のファイル

OKと内容を共有する別のディレクトリにあるすべてのテキストファイル 、今パイプすべてそのテキストを検索したいです

dir *.txt | get-content | ?{$_} | %{select-string -path searchPath\*.txt -pattern "$_" -simple} 
select-stringに(最初 ?{$_}をすべて空の文字列をフィルタリングします

と一致するものを、 ソースファイルの名前を付けたファイルに出力します。

だから今、それは私たちが戻って私たちのソースファイル名を追跡する必要があるため、我々はforeachの(すなわち%{})で私たちのクエリをwraqppingことによってこれを行うトリッキー取得します。

dir *.txt | %{ $sourceFile = $_; get-content $_ | ?{$_} | %{select-string -path searchPath\*.txt -pattern "$_" -simple} | out-file "$sourceFile.results" } 
+0

これは完璧です!スーパー便利です。ありがとうございました。 –

5

まず私は、ディレクトリここ

内のすべてのテキストファイル用のディレクトリリストを生成したいが方法は次のとおりです。

$textFiles1 = dir -Path C:\Books1 -Filter *.txt 
$textFiles2 = dir -Path C:\Books2 -Filter *.txt 
  1. 次に、それらのテキストファイルのそれぞれを取り、取得コンテンツ。
  2. 最初の本の行が他の書籍にあるかどうかを確認したいと思います。

ここで(テスト)この (未テスト) を行うためのアルゴリズムです:

foreach ($textFile in $textFiles1) { 
    $lines = get-content -Path $textFile 
    foreach ($line in $lines) { 
     foreach ($textFile2 in $textFiles2) { 
      $lines2 = get-content -Path $textFile2 
      if ($lines2 -contains $line) { 
       $matchMessage = 'Line: "{0}" is duplicated in "{1}".' -f $line, $textFile2 
       $matchMessage | out-file C:\report.txt -encoding UTF8 -Append 
      } 
     } 
    } 
} 

notepad C:\report.txt 
+0

元の質問の最後に明確にされている。こんにちは、私はこのインタフェースのハングアップを得ていません:P –

+0

@ KurtisStaples-King私は私の答えを更新しました。それを試してみてください...もちろん、あなたが望むものへの道を修正しなければならないでしょう... –

+0

それを愛する!私は投票をしようとしましたが、私は評判が高いです:P –