2016-12-16 5 views
-1

2つのディレクトリを比較し、ファイルがソースディレクトリに存在しなくなった場合、ファイルを削除するPowerShellコードがあります。例えばCompare-Objectソースにファイルが存在しない場合のファイルの削除

は、私は、私は、フォルダ2でフォルダ1を比較したいフォルダ1 &フォルダ2を持っているファイルは、フォルダ1にはもはや存在しない場合は、フォルダ2.

からこのコードを、それを削除しますと言いますうまく動作しますが、それはまた、日付/時刻のファイルの違いを拾うという問題があります。私は余分どこ-オブジェクト{$ file1の<> $ FILE2}またはそのようなことはあり

Compare-Object $source $destination -Property Name -PassThru | Where-Object {$_.SideIndicator -eq "=>"} | % { 
     if(-not $_.FullName.PSIsContainer) { 
      UPDATE-LOG "File: $($_.FullName) has been removed from source" 
      Remove-Item -Path $_.FullName -Force -ErrorAction SilentlyContinue 
     } 
    } 

フォルダ1にはもうファイルが存在しない場合、それは違いをピックアップしますか。?

乾杯。

答えて

0

私はあなたが私はあなたが私は日付の問題を解消するために何をするのか

Get-ChildItemを使用していると仮定しています$source$destinationのための情報を取得しているかわからない/時間は、これらの変数の中にそれをキャプチャないことであろう。たとえば、次のように

$source = Get-ChildItem C:\temp\Folder1 -Recurse | select -ExpandProperty FullName 
$destination = Get-ChildItem C:\temp\Folder2 -Recurse | select -ExpandProperty FullName 

これによりあなただけの子アイテムではない日付/時刻である各オブジェクトのFullNameプロパティを取得します。

これを実行した後でもスクリプトの一部を変更する必要があります。

+0

はいこれは私が使用しているコードです $ source = Get-ChildItem $ pathofSourceFiles -Recurse |除外ディレクトリ$ excludedDirectories $ destination = Get-ChildItem $ pathofDestination -Recurse |除外ディレクトリ$ excludedDirectoriessing情報を取得する: –

+0

しかし、前にも言及したように、このコードは、同じ名前のファイルに対してはうまく動作しますが、日付/時刻は異なりますが、フォルダは異なります。 –

0

次のスクリプトはサーバーあなたの目的を

$Item1=Get-ChildItem 'SourecPath' 
$Item2=Get-ChildItem 'DestinationPath' 

$DifferenceItem=Compare-Object $Item1 $Item2 

$ItemToBeDeleted=$DifferenceItem | where {$_.SideIndicator -eq "=>" } 



foreach ($item in $ItemToBeDeleted) 
{ 
    $FullPath=$item.InputObject.FullName 

    Remove-Item $FullPath -Force 
} 

はそれが役に立てば幸いすることができます!

+0

ありがとうございます基本的に私はちょうどalittleをrefacted持っているもの。 –

+0

上記のコードは、あなたが求めているものを行います – Venkatakrishnan

0

私はそれが間違って取得しておりません場合は、問題があなたのコードは、ソースと比較して、異なるタイムスタンプのファイルを削除されている: あなたは-ExcludePropertyを試してみましたか?

$source = Get-ChildItem "E:\New folder" -Recurse | select -ExcludeProperty Date 
+0

Compare-Object -Propertyに関する情報はMSDNに従います 比較する参照オブジェクトと差分オブジェクトのプロパティの配列を指定します。 私の唯一の-PropertyがNameの場合、なぜ日時が気になるのですか?私が前に言ったように、それは完璧にファイルのために働くが、2つのフォルダの日付が異なるが同じ名前であれば、 –

0

あなたが複数のディレクトリとファイルを比較したい場合は、すべての中で-recurseオプションを追加し、古いPowerShellの

$yourdir1="c:\temp" 
$yourdir2="c:\temp2" 

$filesnamedir1=(gci $yourdir1 | where {$_.psiscontainer -eq $false}).Name 
gci $yourdir2 | where {$_.psiscontainer -eq $false -and $_.Name -notin $filesnamedir1} | remove-item 

でこの

PowerShellのV5で

$yourdir1="c:\temp" 
$yourdir2="c:\temp2" 

$filesnamedir1=(gci $yourdir1 -file).Name 
gci $yourdir2 -file | where Name -notin $filesnamedir1| remove-item 

ような何かを試してみてくださいgciコマンド

関連する問題