gpt4 book ai didi

powershell - 从文件名中提取日期,然后按日期升序处理文件 - Powershell

转载 作者:行者123 更新时间:2023-12-03 19:39:48 32 4
gpt4 key购买 nike

首先我会提供我的代码然后解释。

$toImport = gci "\\server\folder\*" -include "Examplefile*.txt"
$toImport = $toImport.fullname

$date_of_file = @()

foreach($item in $toImport){
$date_of_file += (split-path $item -leaf).substring(11,6)

}

write-host ($date_of_file | sort-object)

我正在使用 get-childitem 获取文件名,然后将它们的完整路径放入一个数组中。我的 $toImport 变量保存文件路径,它看起来像:

\\server\folder\Examplefile010220.txt
\\server\folder\Examplefile010320.txt
\\server\folder\Examplefile010420.txt
\\server\folder\Examplefile010520.txt
\\server\folder\Examplefile120919.txt

然后我在其上使用 split-path 来获取我可以在其上运行 .substring() 以提取日期的文件名,然后添加这些日期进入变量 $date_of_file,使用上面的示例将保存这些值...010220 010320 010420 010520 120919

然后我尝试按升序对这些日期进行排序,因为我的脚本的后面部分将处理这些文件,但它们必须按顺序完成。

我尝试修复上面发布的脚本的一些事情: (get-date -date $date_of_file | 排序对象)

($date_of_file.ToString('MMddyy') | sort-object)

$date_of_file += ((split-path $item -leaf).substring(11,6) ).toString("MMddyy")

$date_of_file += get-date -date ((split-path $item -leaf).substring(11,6) )

($date_of_file | Sort-Object { $_. -as [datetime] })

$date_of_file += [datetime]::parseexact(((split-path $item -leaf).substring(11,6) ), 'MMddyy', $null).ToString('MMddyy')

我怎样才能让它按日期升序排序?到目前为止,我每次尝试都会遇到错误,或者这个日期仍然在列表的末尾,“120919”,而它应该是第一个。

================= 更新

$toImport = gci "\\server\folder\*" -include "Examplefile*.txt"
$toImport = $toImport.fullname
cls

$date_of_file = @()

foreach($item in $toImport){
$date_of_file += [datetime]::parseexact(((split-path $item -leaf).substring(11,6) ), 'MMddyy', $null)

}

write-host ($date_of_file | Sort-Object)

这个位似乎有效,但它将日期格式放入看起来像 Thursday, January 2, 2020 12:00:00 AM 的格式。我尝试对结果执行 .ToString('MMddyy') 但我收到此错误 Cannot find an overload for "ToString"and the argument count: "1".

最佳答案

一种简洁高效的解决方案,直接对 System.IO.FileInfo 进行排序Get-ChildItem 以文件名中嵌入的格式日期字符串隐含的时间顺序输出实例:

Get-ChildItem \\server\folder -Filter Examplefile*.txt |
Sort-Object { $_.BaseName -replace '.+(\d{2})(\d{2})(\d{2})', '$3$1$2' }
  • Get-ChildItem\\server\folder -Filter Examplefile*.txt:

    • -Filter 是查找与给定通配符模式匹配的文件的最有效方法,因为它在源(文件系统)进行过滤,而不是先检索所有项目,然后在事后进行 PowerShell 过滤(-Include 就是这样)。
  • 排序对象 { $_.BaseName -replace '.+(\d{2})(\d{2})(\d{2})', '$3$1$2' :

    • 将脚本 block ({ ... }) 传递给 Sort-Object 的(隐含的)-Property 参数导致针对每个输入对象评估脚本 block ,手头的输入对象反射(reflect)在自动变量 $_ 中。

    • -replace operation使用基于正则表达式的字符串替换,有效地将嵌入的日期字符串从 MMddyy 重新排列为 yyMMdd 格式,并根据后者进行排序,以便词法排序等于时间排序。

关于powershell - 从文件名中提取日期,然后按日期升序处理文件 - Powershell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59850679/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com