2016-11-07 22 views
-2

1行のテキストファイルが区切られたフォルダがあります。あるパターンに一致するファイルを見つけて1つのフォルダに移動し、一致しないものを別のフォルダに移動する必要があります。powershellで4番目のパイプ区切り文字の後に文字を特定し、ファイルを移動します。

例:

FILE1.TXTが国家含まれてい|オハイオ州|ジップ| 43001 | 1 |フレッド|スミス

FILE2.TXTの状態が含まれている|ケンタッキー|ジップ| 40006 | 3 |ヘンリー|ヒギンズ など

powershellを使用して、5番目のフィールド(4番目のパイプ区切り文字の後ろにある)が1などの特定の値に等しいすべてのファイルを見つけて移動する必要があります。次に、5番目のフィールド別のフォルダに1に等しくありません。テキストファイルの内容を変更することはできません。

PowershellとおそらくRegExを組み合わせてファイルを検索して移動することはできません。

ありがとうございました。

[編集] 追加コードが追加されました...希望通りに5番目のフィールドの値を見つけました。私はmoveステートメントをまだ完了していません。コードは最も効率的ではありません。ファイルに埋め込まれていた改行/改行がないため、Get-Content行に "-Raw"を追加しました。認識できないパイプ文字で問題を修正したようです。

$sourcepath = "D:\Infiles" 
$destpath1 = "D:\Outfiles1" 
$destpath2 = "D:\Outfiles2" 
Set-Location $sourcepath 
$files = Get-ChildItem -Path $sourcepath -Recurse 
foreach ($file in $files) 
{ 
    $testtext = Get-Content $file -Raw 
    $fields = $testtext.Split('|') 
    $Field5=$fields[4] 
    # write the output to test the code 
    Write-Output $Field5 
    # insert code here to move file to destination path based on the value of $Field5 
} 
+3

あなたは[MCVE]任意の種類を持っていますか?これまでのコードは? – gravity

+0

ここに正規表現を使用する理由はありません。Powershellには、構造化されたデータを解析し、より便利な方法でそのオブジェクトにアクセスできるようにするコマンドレットがあります。あなたがこれまでに試したことを私たちに教えてください。 – alroc

+0

パイプを区切り文字として使用してcsvをインポートし、私がまだ存在しないカスタムヘッダーを作成します。目的の列をフィルターし、ファイルに出力します。 – Nkosi

答えて

0

あなたはループの最後にこれを追加し、ソースディレクトリの構造を保持する必要がある場合を除き:

if ($Field5 -eq 1) { 
    Move-Item -Path $file.FullName -Destination $destpath1; 
} else { 
    Move-Item -Path $file.FullName -Destination $destpath2; 
} 
+0

ありがとう@alroc。これを終わらせるために必要なもの – stanltod

関連する問題