如何使用TimStamp Appended文件名选择正确的文件并将最后一个删除的文件复制到另一个文件夹中?

发布于 2025-01-22 12:21:51 字数 497 浏览 0 评论 0原文

我正在尝试使用文件名(文件名中的时间戳)选择正确的文件。

我有3个文件:text.041922.061512text.041922.063016text.041922.064212。我需要选择text.041922.064212,因为它是最后创建的,它在文件名本身上具有数据和时间。如何使用PowerShell实现这一目标?

提前致谢。我真的很感激。

我的脚本是:

Get-ChildItem -Path "c:/demo | Sort-Object { [DateTime]::ParseExact($_.BaseName.Substring(7,13).Replace('.',' '), "MMddyy hhmmss",$null) } | Select-Object -First 1 | Copy-Item -Destination "E:/test/"

I am trying to pick the right file using file name(timestamp appended in the file name).

I have 3 files: text.041922.061512, text.041922.063016, text.041922.064212. I need pick text.041922.064212 because it was created last which has data and time on the file name itself. How do i achieve this using PowerShell?

Thanks in advance. I would really appreciate it.

My script is this:

Get-ChildItem -Path "c:/demo | Sort-Object { [DateTime]::ParseExact($_.BaseName.Substring(7,13).Replace('.',' '), "MMddyy hhmmss",$null) } | Select-Object -First 1 | Copy-Item -Destination "E:/test/"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一向肩并 2025-01-29 12:21:51

您的文件名称缺少其扩展名,但是假设扩展名没有任何数字数字,则可以使用-replace'\ d+'从文件名中删除所有非数字数字,然后对于parseexact可以是mmddyyhhmmss

如果这些文件实际上没有扩展名,请使用$ _。名称而不是$_。Basename

Get-ChildItem -Path "c:/demo" | Sort-Object {
    [DateTime]::ParseExact(($_.BaseName -replace '\D+'), 'MMddyyHHmmss', $null)
} -Descending | Select-Object -First 1 | Copy-Item -Destination "E:/test/"

这是一个可以用于测试的示例:

[System.IO.FileInfo[]]('text.041922.061512', 'text.041922.063016', 'text.041922.064212') | Sort-Object {
    [DateTime]::ParseExact(($_.Name -replace '\D+'), 'MMddyyHHmmss', $null)
} -Descending | Select-Object -Expand Name -First 1

# Returns: text.041922.064212

Your file names are missing their extension, but assuming the extension doesn't have any numeric digits, you could use -replace '\D+' to remove all non numeric digits from the file names and then the format for ParseExact could be MMddyyHHmmss.

If the files actually don't have an extension, use $_.Name instead of $_.BaseName.

Get-ChildItem -Path "c:/demo" | Sort-Object {
    [DateTime]::ParseExact(($_.BaseName -replace '\D+'), 'MMddyyHHmmss', $null)
} -Descending | Select-Object -First 1 | Copy-Item -Destination "E:/test/"

Here is an example that you can use for testing:

[System.IO.FileInfo[]]('text.041922.061512', 'text.041922.063016', 'text.041922.064212') | Sort-Object {
    [DateTime]::ParseExact(($_.Name -replace '\D+'), 'MMddyyHHmmss', $null)
} -Descending | Select-Object -Expand Name -First 1

# Returns: text.041922.064212
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文