2017-03-16 19 views
-3

Hello Power Shell Champs、ファイル名の一部に基づいて別のフォルダにファイルを移動する

私は状況があります。

私はCでの国名の例で約100のファイルを持っている:

  • レポートファイル - USA.ppt
  • レポートファイル - Canada.ppt
  • レポートファイルの-Brazil.ppt:としてレポート\
  • レポートファイル - Chile.ppt

私はまた、フォルダCにおける国の名を持つフォルダを持っている:\国

私がしたいのは、国名に基づくファイルを、国名に基づいてそれぞれのフォルダに移動することです。

動作するループを作成することができます。 注:宛先フォルダは既に作成されているだけで、ファイルを移動する必要があります。

+1

サイト、アフサルへようこそ取り除きます。これまでに書いたことを示すことができるので、あなたが直面している問題を手助けすることができます。このウェブサイトで質問する方法については、https://stackoverflow.com/help/how-to-askを参照してください。 –

+0

複数の回答が投稿されていますが、これらのいずれかが見つかった場合は、アップしてください。 –

答えて

-1

あなたの側からどれだけ遠くにあるかを確認するコードは役に立ちましたが、私はこれをトリックする必要があります。 編集した)

$list = (Get-ChildItem -Path C:\reports\ -Name -File).Replace('Report File-','').Replace('.ppt','') 

foreach ($item in $list) { 
Move-Item -Source ".\Report File-$($item).ppt" -Destination "C:\Countries\$($item)\" 
} 
0

Maigiは、ここで働いているコードを言及し、あなたのオリジナルのポストではなく、Copy-Itemに要求されるように、それは実際にMove-Itemを使用するので。

このコードはテスト済みであり、動作しています。

$list = (Get-ChildItem -Path C:\reports\ -Name -File).Replace('Report File-','').Replace('.ppt','') 

ForEach-Object ($item in $list) 
{ 
    Move-Item -Path "C:\reports\Report File-$($item).ppt" -Destination "C:\Countries\$($item)\" 
} 
0

PowerShellでタスクを実行する複数の方法常にある: このスクリプト

  • はハイフンでベース名分割し、第2の部分(ゼロベースの)かかり
  • があれば宛先パスは作成されていません。

Get-ChildItem 'C:\reports\Report File-*.ppt' -File | ForEach-Object{ 
    $Country = Join-Path "C:\Country" $($_.BaseName.split('-')[1]) 
    If (!(Test-path $Country)) {mkdir $Country|Out-Null} 
    $_|Move-Item -Destination $Country -whatif 
} 

出力がOKに見える場合は、-whatif

関連する問題