【问题标题】:powershell date comparision need to delete filepowershell日期比较需要删除文件
【发布时间】:2018-11-02 20:28:10
【问题描述】:

我必须制作 powershell 文件,我需要比较 2 个日期并删除文件夹,这就像上次写入项目的 10 天以上。就像今天是 10 月 30 日,我需要删除日期比较为 11 12 和 13 天的文件夹

     #ChildItem "\\server\Backup" -Recurse | Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays.(-30) }
#$fulllist =Get-ChildItem "\\server\Backup\SharePoint Backup\"| Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays.(5) }
$fulllist =Get-ChildItem "\\server\Backup\SharePoint Backup\"
#$fulllist =Get-ChildItem "\\server\Backup\SharePoint Backup\" -Recurse | Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays.(-20) }

foreach ($fileitem in $fulllist)
{
    $filename_big = $fileitem.FullName
    #write-host $filename_big  
    $d = [datetime](Get-ItemProperty -Path $filename_big -Name LastWriteTime).lastwritetime
    $d1=(get-date)
    #write-host   $d
   #write-host   $d1
   $ts = New-TimeSpan -Start $d -End $d1
   $ts.Days # Check results\
  write-host $ts
   if($ts -gt 10)
   {
    write-host "inside"
    }
     # Move-Item -Path $filename_big -Destination "\\DBORION\d$\backup"

}

我比较两个日期 $d 和 d1 并且天数大于 10,文件夹应该被删除。 但是随着输出 iam 进入所有文件夹,无论是 10 天还是 5 天,请查找输出

    0
00:58:29.2923431
inside
0
13:33:32.4388907
inside
0
07:02:28.0900378
inside
0
03:52:35.3425970
inside
0
00:58:29.4017400
inside
13
13.08:49:05.4930775
inside
12
12.08:49:06.3403154
inside
11
11.08:48:31.4681438
inside
10
10.08:48:18.6859604
inside
9
9.08:49:01.2220544
inside
8
8.08:39:56.7230423
inside
7
7.08:48:15.3242000
inside
6
6.08:49:03.6123002
inside
5
5.08:49:08.5439345
inside
4
4.08:49:06.6188386
inside
3
3.08:49:07.2066345
inside
2
2.08:49:06.2290185
inside
1
1.08:45:07.0454477
inside
0
08:47:24.1939025
inside

好的,我知道了

$fulllist = Get-ChildItem "\\Server\Backup\SharePoint Backup\" 

$Days = 12

foreach ($fileitem in $fulllist)
{
    $filename_big = $fileitem.FullName

    $deletedate = (Get-Date).AddDays(-$Days)
    $Folderdate = [datetime](Get-ItemProperty -Path $filename_big -Name LastWriteTime).lastwritetime


   if($Folderdate -le $deletedate)
   {

        $filename_big
        Remove-Item -Path  $filename_big -Force -Confirm:$false
   }


}

现在我唯一关心的是它要求确认删除,我不希望那个弹出框如何绕过它

【问题讨论】:

    标签: powershell


    【解决方案1】:

    我认为问题在于您的变量 $ts 是一个时间跨度。时间跨度永远不会大于 10,因为它是一个数字。在你的 if 子句中你应该使用:

     if($ts.Days -gt 10)
    

    还有一些其他可能需要的建议来节省一些字节:

    • 当您定义 $d 变量时,这可以做得更短:$d = $fileitem.lastwritetime - $fileitem 变量本身具有 lastwritetime 属性。
    • 将函数分配给变量时,不需要圆括号:只需使用$d1 = Get-Date。仅当您要分配函数的属性时才需要括号,例如 $d = (Get-Date).DayOfWeek
    • 您可以通过以下方式避免创建时间跨度:if($d -gt $d1.addDays(-10))。这会将您的文件时间戳 $d 与当前时间减去 10 天进行比较,这意味着时间点正好是 10 天前。

    删除文件时绕过确认:使用-force 参数。

    【讨论】:

    • 我真的不明白为什么 [timespan] 不能在 10 之后进行比较,但你是对的。一个很好的例子来说明这一点:(New-TimeSpan -Start ((get-date).AddDays(-20)) -End (Get-Date)) -gt 20 等于 $true(New-TimeSpan -Start ((get-date).AddDays(-20)) -End (Get-Date)).Days -gt 20 等于 $false
    • 如果您创建了一个时间跨度对象,只需在控制台中显示它即可。它是一个具有多个属性的对象,例如dayshourstotalseconds。而且您无法将整数与 PSObject 进行比较 - 因此您必须选择要比较的属性并调用它,这就是 $ts.Days 所做的 - 这是整数类型的值。
    • 刚刚回答了你的第二个问题:添加-force参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 2017-03-15
    • 2019-07-14
    • 1970-01-01
    • 2019-03-06
    • 2014-07-15
    • 1970-01-01
    相关资源
    最近更新 更多