Powershell 比较日期并分配给每个变量

Powershell 比较日期并分配给每个变量,powershell,compare,Powershell,Compare,我在目录中有2个excel文件,如下所示,带有时间戳(YYYYMMdd\u HHmmss)。 目录中有2个excel文件。我将从目录中的文件名中提取时间戳,然后比较两个日期,最后为每个日期分配变量 我想将$Start变量分配为report-capacity-server01.contoso.com-20191010\u 171044.xlsx. 我想将$End变量分配为report-capacity-server01.contoso.com-20191108_130454.xlsx。为了从文件中

我在目录中有2个excel文件,如下所示,带有时间戳(
YYYYMMdd\u HHmmss
)。 目录中有2个excel文件。我将从目录中的文件名中提取时间戳,然后比较两个日期,最后为每个日期分配变量

我想将
$Start
变量分配为
report-capacity-server01.contoso.com-20191010\u 171044.xlsx.


我想将
$End
变量分配为
report-capacity-server01.contoso.com-20191108_130454.xlsx。
为了从文件中提取时间戳,可以使用
-split“-”

这将为您提供一个字符串数组,这些字符串在每个分隔符后被分割

$files = Get-ChildItem -Path ./Path-to-files
$timestamp = $files.BaseName -split "-"
$timestamp
变量现在包含两个文件中的字符串数组。通过索引操作,您可以选择时间戳并进行比较。当然,您也可以循环遍历每个文件并将时间戳直接分配给变量,而不是拆分
$files
变量中的所有文件。

如果您希望按照嵌入的时间戳(可能带有不同的名称前缀)按时间顺序排列完整的文件名,将时间戳提取表达式作为排序条件传递

$Start, $End = (Get-ChildItem *.xlsx |
                 Sort-Object { ($_.Name -split '[-.]')[-2] }).FullName
  • Get ChildItem*.xlsx
    获取当前目录中所有扩展名为
    .xlsx
    的文件的文件信息对象(
    [System.IO.FileInfo]
    实例)

  • 排序对象
    接收一个脚本块(
    {…}
    ),作为从每个输入文件的名称(
    $.name
    )中提取时间戳的标准,方法是将其拆分为
    -
    字符,并提取倒数第二个(
    [-2]
    )结果标记

  • (…).FullName
    使用成员枚举提取已排序文件信息对象的全名(路径)

  • $Start,$End=…
    是一种分解赋值,它将2个(按时间顺序排序的)完整文件名分配给各个变量。请注意,如果有2个以上的文件,
    $End
    将以数组形式接收所有剩余的文件

旁白:

给定时间戳字符串的格式,可以按原样使用它们进行比较,因为词法比较等同于按时间顺序进行比较

如果要将时间戳字符串转换为正确的.NET
[datetime]
实例,请执行以下操作:

$timeStamps = Get-ChildItem *.xlsx | ForEach-Object { 
  [datetime]::ParseExact(($_.Name -split '[-.]')[-2], 'yyyyMMdd_HHmmss', $null) 
}

你的问题是什么?您想知道如何获取时间戳吗?首先,目录中有2个excel文件。我将从目录中的文件名中提取时间戳,然后比较两个日期,最后为每个日期分配变量。在这种情况下,请使用此说明编辑您的问题以进行澄清。我不太清楚目录中的文件的名称。。名称是否只是时间戳,如
20191010_171044.xlsx
,或者时间戳是名称的一部分?你能举个例子吗?没有名字,只有时间戳,比如20191010_171044.xlsx。e、 g report-capacity-server01.contoso.com-20191108_130454.xlsx类似这样。我将从文件名中提取时间戳