每月第一次将文件移动到备份文件夹,然后对文件进行压缩



我从未使用过powershell,我只需要一个总是在月初运行的程序

程序应该做什么?

在月初,它应该将除上个月外的所有数据移动到另一个文件夹,并将其压缩到那里以节省存储空间。

对于我的问题,我有(-31天(,但不是每个月都有31天,我该如何解决它,或者它适合这样吗?

如果我在这里解释错了,我很抱歉,请告诉我。

foreach ($kunde in (Get-ChildItem "C:UserskaarDesktopOrdneralt" -Exclude *.pdf , *.jpeg, *.png, *.gif ))
{
$dirname = $kunde.name 
for ($i=0; $i -lt $dirname.length; $i++)
{
$dirbackup = $dirname + "BP"
get-childitem -Path "C:UserskaarDesktopOrdneralt$dirnameARCHIV" |
where-object {$_.LastWriteTime -lt (get-date).AddDays(-31)} | 
move-item -destination "C:UserskaarDesktopOrdnerneu$dirbackup"
}

$dirdate = get-date -format 'yyyy-MM-dd' 
$backupname = $dirdate + "__" +  $dirname
Compress-Archive -Path "C:UserskaarDesktopOrdnerneu$dirbackup" -DestinationPath "C:UserskaarDesktopOrdnerneu$dirbackup$backupname"
Remove-Item "C:UserskaarDesktopOrdnerneu$dirbackup" -Recurse -Include *.pdf -force
}

我在寻找想法,但没有找到任何

#code is to get the first date of every month
$firstday=get-date -Day 1

另一种方法是在任务调度程序中安排脚本,以便在每月1日的指定时间触发PowerShell脚本。在任务调度程序中创建新任务的参考链接

如前所述,您可以使用获取当月的天数

$today = Get-Date
$nDays = [DateTime]::DaysInMonth($today.Year, $today.Month)
# set to midnight so it is independent of the actual time the script runs
$refDate = $today.AddDays(-$nDays).Date 

然后在Where Object子句中使用它:

Where-Object {$_.LastWriteTime -lt $refDate}

谢谢大家!

这个程序将在每个月的第一天执行,我就是这样管理的。这对我很管用!

$tage =(Get-Date).adddays(-1).day +1 #  value of days from month before

$dirbackup = $dirname + "BP"
get-childitem -Path "C:UserskaarDesktopOrdneralt$dirnameARCHIV" | 
where-object {$_.LastWriteTime -lt (get-date).AddDays(-$tage)} | 
move-item -destination "C:UserskaarDesktopOrdnerneuTemp"

相关内容

最新更新