每个月的第一天将文件移动到备份文件夹并压缩文件
Move Files to a Backup Folder every first in the month and Zip the Files
我从来没有用过powershell,我只需要一个在月初总是运行的程序
程序应该做什么?
在月初,它应该将除上个月以外的所有数据移动到另一个文件夹并将其压缩到那里以节省存储空间 space。
关于我的问题,我有(-31 天)但不是每个月都有 31 天,我该如何解决或是否适合这样?
很抱歉,如果我在这里解释有误,请告诉我。
foreach ($kunde in (Get-ChildItem "C:\Users\kaar\Desktop\Ordneralt" -Exclude *.pdf , *.jpeg, *.png, *.gif ))
{
$dirname = $kunde.name
for ($i=0; $i -lt $dirname.length; $i++)
{
$dirbackup = $dirname + "BP"
get-childitem -Path "C:\Users\kaar\Desktop\Ordneralt$dirname\ARCHIV" |
where-object {$_.LastWriteTime -lt (get-date).AddDays(-31)} |
move-item -destination "C:\Users\kaar\Desktop\Ordnerneu$dirbackup"
}
$dirdate = get-date -format 'yyyy-MM-dd'
$backupname = $dirdate + "__" + $dirname
Compress-Archive -Path "C:\Users\kaar\Desktop\Ordnerneu$dirbackup" -DestinationPath "C:\Users\kaar\Desktop\Ordnerneu$dirbackup$backupname"
Remove-Item "C:\Users\kaar\Desktop\Ordnerneu$dirbackup" -Recurse -Include *.pdf -force
}
我一直在寻找想法,但一无所获
#code is to get the first date of every month
$firstday=get-date -Day 1
另一种方法是在任务计划程序中安排您的脚本,以在每月 1 日的指定时间触发 PowerShell 脚本。
参考 link 在 task scheduler
中创建新任务
如评论所述,您可以使用
获取当月的天数
$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:\Users\kaar\Desktop\Ordneralt$dirname\ARCHIV" |
where-object {$_.LastWriteTime -lt (get-date).AddDays(-$tage)} |
move-item -destination "C:\Users\kaar\Desktop\Ordnerneu\Temp"
我从来没有用过powershell,我只需要一个在月初总是运行的程序
程序应该做什么?
在月初,它应该将除上个月以外的所有数据移动到另一个文件夹并将其压缩到那里以节省存储空间 space。
关于我的问题,我有(-31 天)但不是每个月都有 31 天,我该如何解决或是否适合这样?
很抱歉,如果我在这里解释有误,请告诉我。
foreach ($kunde in (Get-ChildItem "C:\Users\kaar\Desktop\Ordneralt" -Exclude *.pdf , *.jpeg, *.png, *.gif ))
{
$dirname = $kunde.name
for ($i=0; $i -lt $dirname.length; $i++)
{
$dirbackup = $dirname + "BP"
get-childitem -Path "C:\Users\kaar\Desktop\Ordneralt$dirname\ARCHIV" |
where-object {$_.LastWriteTime -lt (get-date).AddDays(-31)} |
move-item -destination "C:\Users\kaar\Desktop\Ordnerneu$dirbackup"
}
$dirdate = get-date -format 'yyyy-MM-dd'
$backupname = $dirdate + "__" + $dirname
Compress-Archive -Path "C:\Users\kaar\Desktop\Ordnerneu$dirbackup" -DestinationPath "C:\Users\kaar\Desktop\Ordnerneu$dirbackup$backupname"
Remove-Item "C:\Users\kaar\Desktop\Ordnerneu$dirbackup" -Recurse -Include *.pdf -force
}
我一直在寻找想法,但一无所获
#code is to get the first date of every month
$firstday=get-date -Day 1
另一种方法是在任务计划程序中安排您的脚本,以在每月 1 日的指定时间触发 PowerShell 脚本。 参考 link 在 task scheduler
中创建新任务如评论所述,您可以使用
获取当月的天数$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:\Users\kaar\Desktop\Ordneralt$dirname\ARCHIV" |
where-object {$_.LastWriteTime -lt (get-date).AddDays(-$tage)} |
move-item -destination "C:\Users\kaar\Desktop\Ordnerneu\Temp"