【问题标题】:How do I use LastWriteTime when comparing files in different folder比较不同文件夹中的文件时如何使用 LastWriteTime
【发布时间】:2019-12-04 18:01:45
【问题描述】:

此脚本通过NameLengthLastWriteTime 比较FILE 对象。

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 文件中的信息与 源文件夹中的文件/补丁进行比较
  4. 列表项
  5. 如果 源文件夹 包含旧文件/补丁 -- 什么也不做
  6. 如果源文件夹包含较新的文件,则将这些文件复制到 C:\NewPatchFolder
  7. 然后运行脚本以应用所有新补丁

我已经处理了#1、#2。我打算修改/添加到上面的脚本以简化 #3、#4 和 #5 中的步骤。

是否可以修改上述脚本以实现我的目标如下:

  • 比较 C:\Source 文件夹中文件的 LastWriteTime 和 C:\Destination 中的文件
  • 如果 LastWriteTime 等于或大于 C:\Destination 文件夹中文件的 LastWriteTime,则将 C:\Source 文件夹中的文件复制到 C:\NewPatchFolder

【问题讨论】:

    标签: powershell powershell-2.0 powershell-3.0


    【解决方案1】:

    我不会为此使用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'
        }
      }
    }
    

    【讨论】:

    • 太棒了!!谢谢您的回答...我最终找到了另一个可行的解决方案: $Source = Get-ChildItem "C:\Source" $T = (dir C:\Destination | select LastWriteTime -Last 1).lastwritetime dir | ?{$_.creationtime -ge $T -and !$_.PSiscontainer} foreach ($i in $Source) { if ($i.CreationTime -ge $T) { Copy-Item $i.FullName C:\NewPatchFolder } }
    • @Tony 请不要在 cmets 中发布代码,因为这往往是不可读的。如果您找到了另一个解决方案,您应该将其发布为答案并接受它。请注意,您的代码与您概述的要求不匹配,并且也可能无法按您的预期工作。 $T 分配给C:\Destination 中列出的最后一个文件的LastWriteTime,不能保证它是最近(或最少)最近的文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 2018-09-14
    相关资源
    最近更新 更多