2016-11-10 1 views
1

ねえ、私はpowershellスクリプトを使用してたくさんのファイルを移動する必要があり、ちょっとした助けが必要です。Powershellアイテムを見つけて移動する

> tree . 
\ 
├───Folder1 
│ ├───Sub1 
│ │ └───Stockfile 
│ └───Sub2 
└───Folder2 
    ├───Sub1 
    │ └───Stockfile 
    └───Sub2 

次のスクリプトは、stockfilesを見つけて、各mainfolderのSUB2のフォルダに移動する必要がありますする必要があるとして

ルートです。

$var = get-childitem -Filter *stock* -recurse 
foreach ($file in $var) { 
write-host ($file.FullName) 
} 
+2

「Sub2」フォルダの名前は一貫していますか?コピー先のフォルダの名前をどのように知っていますか?それは明示的に 'Sub2'という名前ですか? – gravity

+0

フォルダの名前はSub1とSub2ではありません。 TMから始まり、次に6つの乱数からなる400のフォルダがあります。 –

答えて

1

は、以下のことを試してみてください)。

$var = get-childitem -Filter *stock* -recurse 
foreach ($file in $var) { 
    $parent = Split-Path $file.fullname -parent 
    Move-Item $file.FullName -destination $parent\..\sub2\1.txt 
} 

私はこれはかなりないですけど、それは動作しますファイルを作成し、...\Sub2を宛先(ディレクトリ)パスにします。

このように、在庫ファイルは、...\Sub1サブツリー内のどこからでも直接...\Sub2に移動されます。

注:

  • -WhatIf最初に何が起こるかを示します。それを取り除いて実際の移動を実行します。

  • 仮定は在庫ファイルパスだけ Sub1の成分が含まれていること、およびSub1サブツリー内の重複した名前とは在庫ファイルが存在しないということです。

  • -replace理由\文字である正規表現、としてその最初のオペランドを解釈します。リテラルとして認識されるためには、\\としてエスケープする必要があります。実際のフォルダ名の文字でもエスケープする必要があります(ただし、この場合は使用しないでください)。

    • 事前にフォルダ名がわからない場合、あなたは安全に[regex]::Escape($folderName)
+0

私は-WhatIfを削除しました。しかし、-WhatIfステートメントがないと、次のメッセージが表示されます。 –

+0

Move-Item:パスの一部を見つけることができませんでした。 [Move-Item]、DirectoryNotFoundException + FullyQualifiedErrorId:MoveFileInfoItemIOError、Microsoft.PowerShell.Commands.MoveItemCommand –

+0

これでうまくいきました。次の課題は、TM *で始まるフォルダからファイルを移動することです。フォルダ名はTM123456、TM456789などのようになります。それらのフォルダには2つのサブフォルダがあります。 TMで始まるフォルダからファイルを移動する方法は? –

1

フォルダはすべてSUB1、SUB2のと呼ばれていると仮定します

は、私は次のスクリプトは、リスト内のすべてのstockfilesを表示するように作られました。

Get-ChildItem -File -Recurse -Filter *_stock.csv | 
    Move-Item -WhatIf -Destination { $_.FullName -replace '^(.*)\\Sub1\\','$1\Sub2\' } 

アプローチは、各株式の完全なパスから...\Sub1までのパスプレフィックスを抽出します。

0

でそれを逃れることができますが、私はそれを感謝多く、この方法を働かせました。

$var = get-childitem -Filter *_stock.csv -recurse 
foreach ($file in $var) 
{ Move-Item $file.FullName ($file.FullName -replace '^(.*)\\Sub1\\','$1\Sub2\') } 
+1

これは本質的に私が提案した解決策であり、私の答えがより簡潔であり、説明も提供されているので、私の答えを受け入れてこれを削除してください。あなたに新参者に標準的な助言を与えることを許可します。答えがあなたの問題を解決したら、それの横にある大きなチェックマーク(✓)をクリックして受諾し、オプションでそれ以上の投票も行います(投票は少なくとも15評判が必要です)。 他の回答が有益だった場合は、投票してください。受諾およびアップ投票は将来の読者に役立ちます。関連するヘルプセンターの記事(http://stackoverflow.com/help/someone-answers)を参照してください。 – mklement0

関連する問題