2017-07-31 10 views
3

から除外したフォルダ私はそうのように、巨大なディレクトリ(数千のフォルダを)持っている:PowerShellの - 文字列

...\94000\abc\def\hig 
...\95000\abc\def\hig 
...\96000\abc\def\hig 
...\97000\abc\def\hig 
... 

はだから交互パスの一部がありますが、フォルダ構造の残りの部分は同じです。また、abcやdefの下のサブフォルダもたくさんあります。

私がする必要があるのは、特定のファイルを "hig"というフォルダからコピーすることです。

は、私はPowerShellのに非常に新しいですが、以下の一緒に入れて管理:

$destination = "C:\Users\etc..." 
    $source = "B:\94000" 
    Get-ChildItem $source -Filter "LIVE*.docx" -File -Recurse | Foreach { 
      Copy-Item $_.FullName $destination 
    } 

私はそれが非常に基本的なことを知っているが、それは実際に動作します。問題はそれがかなりゆっくりで、フォルダの数がふるい落とされることです。

何かを迅速にする方法はありますか?私はスクリプトが必要なファイルを含んでいないことを私が知っているフォルダをスキップさせるように考えていました。私はので、私はそうのように、正確なフォルダを定義することができ、パスにワイルドカードを使用することができれば

私も思っていた: \ 9 * 000abc \デフ\ HIG

しかし、いずれかの作業を行うことができませんでした。

ご迷惑をおかけして申し訳ございません。

答えて

0

Get-ChildItemとすると、-Excludeに文字列を使用すると、フォルダ/ファイルをスキップできます。これは物事を速めるかもしれません。また、Powershell 2.0を使用している場合は、Get-ChildItemは非常に遅いです。 Powershell 3.0以上にアップグレードすると、はるかに高速になります。

2

あなたが暗示したように、もっとも間違いなくワイルドカードを使用できます。あなたは行うことができます。

Get-ChildItem B:\9*000\abc\def\hig\live*.docx 
などのファイルを返す必要があり

B:94000 \ \ ABC \ defは\ HIG \ライブ:94000 \ ABC \ defは\ HIG \ livesite.docx
B \ .docxの
B:\ 95000 \ ABC \ defは\ HIG \ livefreeordie.docx
B:\ 96000 \ ABC \ defは\ HIG \ liverandonions.docx
B:96000 \ \ ABC \ defは\ HIG \ livesinmomsbasement.docx

次に、それらをにパイプすることができますは次のようになります。

Get-ChildItem B:\9*000\abc\def\hig\live*.docx | Copy-Item -Destination $destination 
0

デフォルトではパスのワイルドカードがサポートされています。また、フィルタはファイルを解析する最も速い方法です(Where-Objectなど)。あなたのForEach-Objectコールは実際には遅くなるかもしれません。もう一つの答えは、別の反復ステップを追加することなくパイプライン入力を行うことができるので、その点で高速化するのは正しいです。

$destination = 'C:\Users\etc\' 
$source = 'B:\94*00' 
Get-ChildItem -Path $source -Filter "LIVE*.docx" -File -Recurse | 
    Copy-Item -Destination $destination 
関連する問題