0

此脚本通过NameLength和比较 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  <=

我需要创建一个脚本来检索当前数据库版本并检查单个或多个补丁是否可用。

它的工作方式如下:

  1. 对数据库运行 SQL 查询
  2. 将 SQL 信息存储到 C:\Destination 上的文件名(例如 11.0.3128.0.txt)中
  3. 将 .txt 文件中的信息与Source 文件夹中的文件/补丁进行比较
  4. 项目清单
  5. 如果源文件夹包含旧文件/补丁——什么也不做
  6. 如果Source 文件夹包含较新的文件,则将这些文件复制到 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 回答