0

Nameこのスクリプトは、 、Length、およびによって FILE オブジェクトを比較しますLastWriteTime

cls
$Source= "C:\Source"
$Destination = "C:\Destination"                  

Compare-Object (ls $Source) (ls $Destination) -Property Name, Length, LastWriteTime | Sort-Object {$_.LastWriteTime} -Descending 

出力:

Name                 Length LastWriteTime          SideIndicator
----                 ------ -------------          -------------
11.0.3127.0.txt           6 8/31/2013 10:01:19 PM  <=
11031270.txt              0 8/31/2013 9:43:41 PM   <=
11.0.3128.0.txt          13 8/31/20131:20:15PM     =>
11.0.3129.0.txt           0 8/28/2013 11:34:38 AM  <=

現在の DB バージョンを取得し、単一または複数のパッチが利用可能かどうかを確認するスクリプトを作成する必要があります。

仕組みは次のとおりです。

  1. DB に対して SQL クエリを実行する
  2. C:\Destination のファイル名 (例: 11.0.3128.0.txt) に SQL 情報を保存します。
  3. .txt ファイルの情報を、ソース フォルダーにあるファイル/パッチと比較します。
  4. リスト項目
  5. ソース フォルダに古いファイル/パッチが含まれている場合-- 何もしない
  6. ソース フォルダーに新しいファイルが含まれている場合は、それらのファイルを C:\NewPatchFolder にコピーします。
  7. 次に、スクリプトを実行してすべての新しいパッチを適用します

#1、#2はもうお世話になりました。#3、#4、および#5の手順を簡素化するために、上記のスクリプトを変更/追加することを計画していました。

次のように私の目標を達成するために上記のスクリプトを変更することは可能ですか:

  • C:\Source フォルダー内のファイルの LastWriteTime と C:\Destination 内のファイルを比較します
  • LastWriteTime が C:\Destination フォルダー上のファイルの LastWriteTime と等しいかそれより大きい場合、C:\Source フォルダー内のファイルを C:\NewPatchFolder にコピーします。
4

1 に答える 1

0

私はこれには使いませんCompare-Object。次のことを試してください。

Get-ChildItem $Source | % {
  $f = Join-Path $Destination $_.Name
  if (Test-Path -LiteralPath $f) {
    if ($_.LastWriteTime -ge (Get-Item $f).LastWriteTime) {
      Move-Item $_.FullName 'C:\NewPatchFolder'
    }
  }
}
于 2013-09-03T10:26:30.933 に答える