简体   繁体   English

创建PowerShell脚本以备份文件并附加日期

[英]creating powershell script to backup a file and append the date

Currently I have a one line batch file to back up a file. 目前我有一个批处理文件来备份文件。 I run it manually when I need to back up a file. 我需要备份文件时手动运行它。 The only thing I would like to add to it is the current date. 我想要添加的唯一内容是当前日期。 Here is what I have: 这是我有的:

xcopy /W /Y ACTIVE.DB ACTIVE.DB.BACKUP xcopy / W / Y ACTIVE.DB ACTIVE.DB.BACKUP

the destination file should simply be ACTIVE.DB.BACKUP.YYYYMMDD. 目标文件应该只是ACTIVE.DB.BACKUP.YYYYMMDD。 How would I go about creating a script that will allow me to double click on it from Windows Explorer and make the xcopy happen? 我将如何创建一个脚本,允许我从Windows资源管理器中双击它并使xcopy发生?

Just to point out that you can do this with Copy-Item eg: 只是要指出你可以使用Copy-Item执行此操作,例如:

Set-Location $path
Copy-Item ACTIVE.DB "ACTIVE.DB.$(get-date -f yyyyMMdd)" -Force -Confirm

If you're going for robust then I'd use robocopy.exe . 如果你想要健壮,那么我会使用robocopy.exe

You can customize your filename by embedding a formatted [datetime]::now in the file name in PowerShell like so: 您可以通过在PowerShell中将格式化的[datetime]::now嵌入文件名中来自定义文件名,如下所示:

xcopy /W /Y ACTIVE.DB "ACTIVE.DB.BACKUP.$([datetime]::now.ToString('yyyy-MM-dd'))"

If the line feels busy and unmaintainable, you can refactor it to multiple lines: 如果线条感觉繁忙且无法维护,您可以将其重构为多行:

$now = [datetime]::now.ToString('yyyy-MM-dd')
xcopy /W /Y ACTIVE.DB "ACTIVE.DB.BACKUP.$now"

To get double-click execution, I usually make a batch file that runs the PowerShell command as described here: 要获得双击执行,我通常会创建一个运行PowerShell命令的批处理文件,如下所述:

Set up PowerShell Script for Automatic Execution 设置PowerShell脚本以执行自动执行

I just made a Daily/Weekly/Monthly/Quarterly/Yearly backup script in Powershell this month, and hope it helps. 我本月刚刚在Powershell上制作了每日/每周/每月/每季/每年的备份脚本,并希望它有所帮助。

This DWMQY backup scenario is to zip a source folder to a date-named zip file, then keep the zips of: 此DWMQY备份方案是将源文件夹压缩为日期命名的zip文件,然后保留以下拉链:

  • last 7 days 过去7天
  • 4 weeks (each Friday's) 4周(每个星期五)
  • 6 months (the last Friday's of each month) 6个月(每个月的最后一个星期五)
  • 4 quarters (the last month's of quarter) 4个季度(上个月的季度)
  • 2 years (the last quarter's of year). 2年(一年的最后一个季度)。

Running as scheduled task on daily basis, it puts the zips into a target folder which is also a Microsoft OneDrive's local folder, so the zips also being remotely sync'd to OneDrive server. 它每天按计划运行,它将拉链放入目标文件夹,该文件夹也是Microsoft OneDrive的本地文件夹,因此拉链也可以远程同步到OneDrive服务器。 Those outdated (non-Friday daily or non-last-DWMQY) zips will be moved to a non-remotely-sync'd folder. 那些过时的(非星期五每日或非最后一次DWMQY)拉链将被移动到非远程同步文件夹。

It's March 5, 2016 today, the following zips should be in the target folder: 今天是2016年3月5日,以下拉链应该在目标文件夹中:

  • 7 days: 160304-160229-160227 7天:160304-160229-160227
  • 4 weeks: 160304, 160226, 160219,160212 4周:160304,160226,160219,160212
  • 6 months: 160226, 160129, 161225, 151127, 151025, 150925 6个月:160226,160129,161225,151127,151025,150925
  • 4 quarters: 151225, 150925,150626,150327 4季度:151225,150925,150626,150327
  • 2 years: 151225, 141226 2年:151225,141226

So there will be 23 zips (actually less since the dups among DWMQY), our files are 250 text documents which is 0.4 GB after zipping, so it's 23*0.4 = 9.2 GB in total, which is less than OneDrive free 15 GB quota. 因此,将有23个拉链(实际上自DWMQY中的重复以来更少),我们的文件是250个文本文档,在压缩后为0.4 GB,因此它总共为23 * 0.4 = 9.2 GB,小于OneDrive免费15 GB配额。

For large source data, 7-zip can be used, which provides maximum 16 mil TB zip size. 对于大型源数据,可以使用7-zip,最大可提供16 mil TB拉链尺寸。 For directly backup folders instead of zips, haven't tried. 对于直接备份文件夹而不是拉链,还没试过。 Guessing it's a transferable procedure from the current zip way. 从当前的拉链方式猜测它是可转移的程序。

# Note: there are following paths:
# 1. source path: path to be backed up. 
# 2. target path: current zips stored at, which is also a remote-sync pair's local path.
# 3. moved-to path: outdated zips to be moved in this non-sync'able location.
# 4. temp path: to copy the source file in to avoid zip.exe failing of compressing them if they are occupied by some other process.
# Function declaration
. C:\Source\zipSaveDated\Functions.ps1 
# <1> Zip data
$sourcePath = '\\remoteMachine1\c$\SourceDocs\*'
$TempStorage = 'C:\Source\TempStorage'
$enddate = (Get-Date).tostring("yyyyMMdd")
$zipFilename = '\\remoteMachine2\d$\DailyBackupRemote\OneDrive\DailyBackupRemote_OneDrive\' + $enddate + '_CompanyDoc.zip'
Remove-Item ($TempStorage + '\*') -recurse -Force
Copy-Item $sourcePath $TempStorage -recurse -Force

Add-Type -A System.IO.Compression.FileSystem
[IO.Compression.ZipFile]::CreateFromDirectory($TempStorage, $zipFilename) 

# <2> Move old files
$SourceDir = "\\remoteMachine2\d$\DailyBackupRemote\OneDrive\DailyBackupRemote_OneDrive"
$DestinationDir = "\\remoteMachine2\d$\DailyBackupRemote\bak" # to store files moved out of the working folder (OneDrive)
$KeepDays = 7
$KeepWeeks = 4
$KeepMonths = 6
$KeepQuarters = 4
$KeepYears = 2
# <2.1>: Loop files
$Directory = $DestinationDir
if (!(Test-Path $Directory))
{
    New-Item $directory -type directory -Force
}
$files = get-childitem $SourceDir *.*
foreach ($file in $files) 
{ # L1
    # daily removal will not remove weekly copy, 7 
    If($file.LastWriteTime -lt (Get-Date).adddays(-$KeepDays).date  `
        -and $file.LastWriteTime.DayOfWeek -NotMatch "Friday"  `
        )
        {
        Move-Item $file.fullname $Directory -force
        }
} # L1 >>
$files = get-childitem $SourceDir *.*
foreach ($file in $files) 
{ # L1
    # weekly removal will not remove monthly copy, 4
    If($file.LastWriteTime -lt (Get-Date).adddays(-$KeepWeeks * 7).date  `
        -and (Get-LastFridayOfMonth ($file.LastWriteTime)).Date.ToString("yyyyMMdd") -NotMatch $file.LastWriteTime.Date.ToString("yyyyMMdd")
        )
        {
        Move-Item $file.fullname $Directory -force
        }
} # L1 >>
$files = get-childitem $SourceDir *.*
foreach ($file in $files) 
{ # L1
    # monthly removal will not remove quarterly copy, 6
    If($file.LastWriteTime.Month -lt ((Get-Date).Year - $file.LastWriteTime.Year) * 12 + (Get-Date).Month - $KeepMonths `
        -and $file.LastWriteTime.Month -NotIn 3, 6, 9, 12
        )
        {
        Move-Item $file.fullname $Directory -force
        }
} # L1 >>
$files = get-childitem $SourceDir *.*
foreach ($file in $files) 
{ # L1
    # quarterly removal will not remove yearly copy, 4
    If($file.LastWriteTime.Month -lt ( (Get-Date).Year - $file.LastWriteTime.Year) * 12 + (Get-Date).Month - $KeepQuarters * 3 `
        -and $file.LastWriteTime.Month -NotIn 12
        )
        {
        Move-Item $file.fullname $Directory -force
        }
} # L1 >>
$files = get-childitem $SourceDir *.*
foreach ($file in $files) 
{ # L1
    # yearly removal will just go straight ahead. 2
    If($file.LastWriteTime.Year -lt (Get-Date).Year - $KeepYears )
        {
        Move-Item $file.fullname $Directory -force
        }
} # L1 >>


<Functions.ps1>
function Get-TimesResult3 
    {
    Param ([int]$a,[int]$b)
    $c = $a * $b
    Write-Output $c
    }

function Get-Weekday {
    param(
        $Month = $(Get-Date -format 'MM'),
        $Year = $(Get-Date -format 'yyyy'),
        $Days = 1..5
    )
$MaxDays = [System.DateTime]::DaysInMonth($Year, $Month)
1..$MaxDays | ForEach-Object {
        Get-Date -day $_ -Month $Month -Year $Year |
          Where-Object { $Days -contains $_.DayOfWeek }  
    }
}

function Get-LastFridayOfMonth([DateTime] $d) {    
    $lastDay = new-object DateTime($d.Year, $d.Month, [DateTime]::DaysInMonth($d.Year, $d.Month))
    $diff = ([int] [DayOfWeek]::Friday) - ([int] $lastDay.DayOfWeek)

    if ($diff -ge 0) {
        return $lastDay.AddDays(- (7-$diff))
    }
    else {
        return $lastDay.AddDays($diff)
    }    
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Powershell 备份脚本创建目录 - Powershell backup script creating directory Powershell备份脚本,每个文件均记录错误 - powershell backup script with error logging per file Powershell将日期时间附加到文件开头 - powershell append date time to beginning of file 将变量名称和日期附加到PowerShell文件输出 - Append variable name and date to PowerShell file output 将Powershell脚本行附加到文件.bat中 - Append powershell script line into file .bat PowerShell 创建存储过程的备份会导致空白文件 - PowerShell creating a backup of a stored procedure results in a blank file powershell脚本列出不包含最新备份文件的文件夹 - powershell script to list folders which do not contain a recent backup file PowerShell脚本,用于备份所有环境变量并将其保存在文件中 - PowerShell script to take backup of all environment variables & save it in a file 备份和复制本地文件夹上的TNSNames.ora文件的Powershell脚本 - Powershell Script to BackUp and Copy TNSNames.ora file on Local folder Powershell脚本,用于通过远程Powershell连接在服务器上创建SQL Server数据库的本地* .bak备份 - Powershell Script for creating a local *.bak backup of a SQL Server database on a server via a remote Powershell connection
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM