2017-10-12 10 views
0

私はこのような形式のCSVでの番号のリストを持っている:ディレクトリ内のすべてのファイルを検索して文字列(数字)の一覧を表示するにはどうすればよいですか?

po 
123 
456 
789 

私も100の+ドキュメントのディレクトリを持っています。私はcsvの各文字列について各文書をチェックする必要があります。いずれかの番号が文書の1つに含まれている場合は、別のファイルに移動する必要があります。これはこれまで私が持っているものです:

$files = Get-ChildItem "\\wh1-app\SPS EDI\ARCHIVE IN\*.txt" 


foreach ($file in $files) { 

    $file = Get-Content $file 

    $pos = Import-Csv -Path C:\Users\ttilton\Desktop\pos.csv -OutVariable string -ErrorAction SilentlyContinue 

    foreach ($po in $pos) { 

     $containsWord = $file | %{$_ -match $po.po} 

     if ($containsWord -contains $true){ 

      write-host $file + " is " + $po.po 

      #Copy-Item $file C:\Users\ttilton\Desktop\pos\ 

     } 
    } 

しかし、それは動作していないようです。それは間違いなく実行されていますが、実際に何もしていません。

アイデア?ありがとう!!

+0

変更errorActionというので、あなたが見ることができます停止します可能な例外が発生する –

+0

'# 'は行全体をコメントに変換するので' Copy-Item'は実行されません –

+0

@ C.Helling私が理解している限り、 '$ containsWord'というコードはブール値 –

答えて

0

私はそれがうまくいくはずですが、あなたの.txtファイルを含むあなたの遠隔地(\\wh1-app\SPS EDI\ARCHIVE IN\*.txt)の(アクセシビリティ)に何か問題があると推測します。私はソースのいくつかを置くのいずれか、このトラブルシューティングを行うために

は、ローカル(例えばC:\temp\*.txt

をファイルやスクリプトの中で、あなたの追加Write-Hostコマンドを追加します。例えばここに:

... 
foreach ($file in $files) { 
    Write-Host $file.name # Is there really a file picked up here? 
    $file = Get-Content $file 
    ... 

あなたを高速化するためにいくつかの一般的な推奨事項が機能:

  • あなたは一度だけ.csvファイルを読み込む必要があり、foreach ($file in $files) {...ループの外$pos = Import-Csv -Path C:\Users\ttilton\Desktop\pos.csv -OutVariable string -ErrorAction SilentlyContinueを置きます。
  • (継続)しないでくださいあなたは試合($containsWordで1つの$Trueif ($containsWord -contains $true){...を検証するために十分で見つかった場合.txtを読んでforeachループの参照を停止するには:https://stackoverflow.com/a/10420522/1701026
+0

ええ、私はファイルの塊を取り出し、今はそれをローカルで実行しています。それはまだ遅いですが、上記のコメントの前に\t \t @TessellatingHecklerによって提供されているアドバイスのおかげで、以前よりもうまく機能します。ありがとう! –

関連する問題