2011-01-25 4 views
2

私はファイルの大きなディレクトリを持っていますが、そのうちの多く(ただしすべてではありません)をコピーしてファイル名と拡張子の間に.backupを挿入することでその場所にバックアップされています。 PowerShellを使用しています。これまでバックアップされていたファイルのみの別のバックアップを作成したいと思います。今回は、バックアップ(日付)タグが付けられています。Powershellでのファイル名の変更

私はまだPowershellの新機能なので、基本的には少しばかげています。この場合、私が考えることができないのは、バックアップと同じファイル名が存在するファイルを選択する方法です。 .backupファイルを取得することはできますが、.backupレスのファイルを取得してパイプに渡すことで、私はまだできません。基本的に私はどこにオブジェクトや何かのためのExists演算子が存在することに興味があると思います。

アイデア?

答えて

3

これはあなたの既存のバックアップを持っているもののファイル名のリストを与える必要があります:

$files = gci <directory path> -name 
    $backups = $files | where {$_ -match "\.backup\.[^\.]+$"} 
    $backedup = $backups | foreach {$_ -replace "backup\."} 
    $newbackups = $backedup | where {$files -contains $_} 

はすべて.backupの名前を取得します。ファイル。
名前から.backupを削除します。
ファイルの元のリストに残っている名前と一致する名前があるかどうかを確認してください。

+0

あなたは2つのディレクトリ内のファイルのリストを比較するための比較・オブジェクトを使用することができませんでしたか? –

+0

ニース。私が見逃していた部分は、 "バックアップ"ファイルのハッキングされた文字列に基づいて2番目のget-childitemを実行できるように、foreachに直接配管していました。ありがとう! – bwerks

+0

私はcompare-objectを使っていた可能性がありますが、正直言って私はコードを書くのが面倒で、見るのは面倒です。小さなバッチ作業では、-containsがより直観的であることがわかります。大規模な反復比較では、-matchを使用します。 – mjolinor

0

ここで私は結局何をしましたか。

get-childitem | ?{$_.name -match '.*backup\..*'} | %{$_.name -replace 'backup\.',''} | %{get-childitem $_} | copy-item -destination {$_.name -replace '\.([^.]*)$','.backup.2011-01-25.$1'}

関連する問題