首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >过去一年的日期比较错误

过去一年的日期比较错误
EN

Stack Overflow用户
提问于 2014-02-13 22:54:42
回答 1查看 41关注 0票数 0

我有一个通过目录递归的小脚本。任何超过X天的文件都应该被删除。

这对于本年度来说很好,但是它没有看到或删除2013年的文件。我认为$_.LastWriteTime和(Get- date ).AddDays()之间的日期比较不知何故不是同一类型的(或以这种方式出现)。

在我的源代码中,我打印文件名信息,而不是为了测试目的真正删除文件。此外,当我刚运行时,我的实际文件结构如下所示:

代码语言:javascript
运行
复制
Get-ChildItem -Path $myPath -Recurse -Force | % { Write-Host $_.FullName " - " $_.LastWriteTime }
  • \MyNAS档案-2014年2月13日1:01:33下午
  • \MyNAS入境-2014年2月13日12:49:32
  • \MyNAS出境-2014年12月13日下午12:45:14
  • \MyNAS\temp-2/13/2014:00:03下午
  • \MyNAS\存档\13090318.res- 9/3/2013 11:46:28 AM
  • \MyNAS\入站\档案-2014年2月13日12:49:32下午
  • \MyNAS\入站\错误-2014年2月13日下午1:01:07
  • \MyNAS\入站\存档\14020445.exp- 2/4/2014 4:26:36下午
  • \MyNAS\入站\档案\14020449.res- 2/4/2014 5:12:24
  • \MyNAS\入站\档案\14021157.exp- 2/11/2014 4:41:30
  • \MyNAS\入站\档案\14021157.RES- 2/11/2014 4:41:31下午
  • \MyNAS\入站\错误\13091117.tmp- 9/11/2013 7:09:00 AM
  • \MyNAS\入站\错误\14021036.tmp- 2/10/2014 2:18:10下午
  • \MyNAS\入站\错误\14021137.tmp- 2/11/2014 1:24:21下午
  • \MyNAS\出站\存档-2014年2月13日5:12:54下午
  • 8/14/2013 4:57:54
  • \MyNAS\出站\存档\14021056.csv- 2/10/2014 2:11:32下午
  • \MyNAS\出站\存档\14021157.csv- 2/11/2014 4:37:55下午
  • \MyNAS\temp\13091935.exp.tmp - 9/19/2013 10:13:41上午

代码:

代码语言:javascript
运行
复制
param([String]$myPath="")
$limit = (Get-Date).AddDays(-33).ToShortDateString()

Write-Host "Looking in : $myPath"
Write-Host "Purging anything older than : $limit"

if ($myPath.length -gt 0) {
Get-ChildItem -Path $myPath -Recurse -Force | Where-Object { $_.LastWriteTime.ToShortDateString() -lt $limit } | % { Write-Host $_.FullName " - " $_.LastWriteTime.ToShortDateString() }
} else {
Write-Host "Source path not passed. Please pass the source path to purge"
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-13 23:12:23

我的问题是安德鲁·莫顿(谢谢!)指出我没有正确地转换我的变量。我需要比较日期时间变量,而不是比较字符串。以下是固定的工作代码:

代码语言:javascript
运行
复制
param([String]$myPath="")
$limit = [datetime](Get-Date).AddDays(-33)

Write-Host "Looking in : $myPath"
Write-Host "Purging anything older than : $limit"

if ($myPath.length -gt 0) {
Get-ChildItem -Path $myPath -Recurse -Force | Where-Object { [datetime]$_.LastWriteTime -lt $limit } | % { Write-Host $_.FullName " - " $_.LastWriteTime.ToShortDateString() }
} else {
Write-Host "Source path not passed. Please pass the source path to purge"
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21767338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档