2017-07-26 7 views
1

目的は、PowerShellを使用してパスから別のパスにフォルダとファイルをコピーすることです。しかし、特定のファイルやフォルダをコピーから除外したい。私は追加のフォルダを除外するための除外リストpowershellを使用してコピーするときに複数のフォルダを除外する

Get-ChildItem -Path $source -Recurse -Exclude "web.config","body.css","Thumbs.db" 

に追加することによって、複数のファイルを除外することができました

$directory = @("Bin") 
?{$_.fullname -notmatch $directory} 

Get-ChildItem -Path $source -Recurse -Exclude "Web.config","body.css","Thumbs.db" | ?{$_.fullname -notmatch $directory} | Copy-Item -Force -Destination {if ($_.GetType() -eq [System.IO.FileInfo]) {Join-Path $dest $_.FullName.Substring($source.length)} else {Join-Path $dest $_.Parent.FullName.Substring($source.length)}} 

これはと思えるように、最終的なコピースクリプトが見えます1つのフォルダで作業しますが、除外されたディレクトリに複数のフォルダを追加すると、複数のフォルダを除外するために何ができるのでしょうか?

+0

.ITに残りの内容をコピーします'$ _。basename'を代わりに使いたいと思っているようなものです。' {$ _。basename -notin $ dir -and $ _。psiscontainer -eq $ true} ' – Kiran

答えて

0

$directoryは配列なので、その内容と一致するようにする必要があります(powershellが単一要素配列を内容のように扱うのは面倒です)。

あなたは試すことができます:

?{$directory -contains $_.fullname} 

の代わりに:

?{$_.fullname -notmatch $directory} 
+0

fullname}は、$ディレクトリにリストされているフォルダがフォルダリストに含まれているかどうかをチェックし、それを除外しますか?{$ directory -no tcontains $ _。フルネーム}。私はこれを使ってみましたが、これはうまくいかないようです。それでも$ directoryの内容に関係なくすべてのフォルダをコピーします –

+0

@stevesimonうん、そうだよ、悪い。そして、それがうまくいかないことを恥知らずに!一度にスクリプト全体を実行するのではなく、PowerShellのコマンドラインで名前の書式設定などを個別にしてみましたか?おそらく、私たちのすべてを助けるために、間違いを犯した場合に備えて、$ディレクトリファイルの内容がどのように表示されるかの例を投稿することができます。 –

0

これを試してみてください:

$excluded = @("Web.config", "body.css","Thumbs.db") 
Get-ChildItem -Path $source -Recurse -Exclude $excluded 

コメントから、フォルダを除外したい場合には、あなたが使用することができますがこのようなもの:

Get-ChildItem -Path $source -Directory -Recurse | 
     ? { $_.FullName -inotmatch 'foldername' } 

か、そして、第一の容器をチェックし、これが行うことができます。

Get-ChildItem -Path $source -Recurse | 
     ? { $_.PsIsContainer -and $_.FullName -notmatch 'foldername' } 
+0

コピー中にファイルを除外することができます。問題はフォルダにあり、複数のフォルダをコピーしないようにする方法が見つからないようです。 –

1
$source = 'source path' 
$dest = 'destination path' 
[string[]]$Excludes = @('file1','file2','folder1','folder2') 
$files = Get-ChildItem -Path $source -Exclude $Excludes | %{ 
$allowed = $true 
foreach ($exclude in $Excludes) { 
    if ((Split-Path $_.FullName -Parent) -match $exclude) { 
     $allowed = $false 
     break 
    } 
} 
if ($allowed) { 
    $_.FullName 
} 
} 
copy-item $source $dest -force -recurse 

上記のコードは$除く配列にリストされている複数のフォルダを除外し、保存先のフォルダ

+1

あなたはタイプミスがあります。最後の行では '$ source'の代わりに' $ files'を使うことになっています。 – Alternatex

関連する問題