2017-09-21 19 views
0

動的に生成された実際のファイルの一部と一致するように、テキストファイルの接頭辞リストに基づいてファイルを移動しようとしています。テキストファイル内の接頭辞の配列から部分ファイル名に基づいてファイルを移動する

例:

 
103 1stCity 
25 2ndCity 
302 3rdCity 

は何のカンマはありませんし、各都市がテキストファイル(CSV形式ではない)の新ラインです。検索するファイルの

例:ここでは

 
103 1stCity 20170901 12387.txt 
129 OtherCity 20170905 354568.txt 

は私が持っているものです。

$file_list = Get-Content "P:\some\path\to\PrefixOfClientNames.txt" 
$search_folder = "J:\FilesToSearch_SomeStayHere" 
$destination_folder = "J:\SomeFilesGetMovedHere" 

foreach ($file in $file_list) { 
    $file_to_move = Get-ChildItem -Path $search_folder | 
        Where-Object { $_.Name -like $file } 
    if ($file_to_move) { 
     Move-Item $file_to_move $destination_folder -WhatIf 
    } 

答えて

0

その他の方法

$file_list = Get-Content "C:\Temp\prefix.txt" | %{$_ + '*'} 
$search_folder = "C:\Temp\searchfolder" 
$destination_folder = "C:\Temp\searchfolder" 

Get-ChildItem $search_folder -file -Recurse | %{ 

$name=$_.BaseName 
$fullname=$_.FullName 

if (($file_list | where { $name -like $_} | select -First 1).Count -gt 0) 
{ 
    Move-Item $fullname $destination_folder -WhatIf 

} 

} 
3

一致するすべてのファイルが同じ保存先フォルダに移動する必要がある場合、あなたがから正規表現を構築したいですプレフィックスファイルを作成し、文字列の先頭にアンカーします。

$prefixes = Get-Content 'P:\some\path\to\PrefixOfClientNames.txt' | 
      ForEach-Object { [regex]::Escape($_) } 

$pattern = '^{0}' -f ($prefixes -join '|') 

次に、movinのパイプラインを使用しますグラム一致するファイル:

Get-ChildItem -Path $search_folder | Where-Object { 
    $_.Name -match $pattern 
} | Move-Item -Destination $destination_folder -WhatIf 
+0

アンスガー - ありがとう - あなたのコードを分析するために私を少し取るつもりが、それは動作するはずのように見えます。私はEsperento57構文を少し理解しやすい。 – TomRanch

関連する問題