LoginSignup
1
0

(ぴえん)Excelの自動保存ファイルをうっかり消してしまうので自動バックアップする

Last updated at Posted at 2024-03-21

PCが予期せぬシャットダウンをした時など、Excelは自動保存ファイルから回復してくれる機能があり便利ですよね。

image.png

でもたまにやってしまうのですが、「自動回復しますか?」ウインドウをうっかり閉じてしまって、「回復できない!ぴえん!」というシーンです(私だけでしたらすみません)。

今回はその自動回復ファイルを自動バックアップしようという件になります(ややこしい)。

スクリプト

1分おきにC:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Excelの中にあるファイルを、Dドライブに保存します。
image.png
image.png

.ps1
$sourceFolder = "$env:USERPROFILE\AppData\Roaming\Microsoft\Excel"
$destinationFolder = "D:\Excel Auto Backup"
$excelFiles = Get-ChildItem -Path $sourceFolder -Filter "*.xlsx"
$logFilePath = Join-Path -Path $destinationFolder -ChildPath "backuplog.txt"

foreach ($file in $excelFiles) {
    $timestamp = Get-Date -Format "yyyyMMdd HH:mm:ss"
    $backupActivity = @()

    $sourceFilePath = $file.FullName
    $destinationFilePath = Join-Path -Path $destinationFolder -ChildPath $file.Name
    if (Test-Path -Path $destinationFilePath) {
        if ((Get-FileHash -Path $sourceFilePath).Hash -ne (Get-FileHash -Path $destinationFilePath).Hash) {
            Copy-Item -Path $sourceFilePath -Destination $destinationFilePath -Force
                $activity = " '$($file.Name)' は上書きバックアップされました。"
                $backupActivity += $timestamp + $activity
        }
        else {
                $activity = " '$($file.Name)' は変更がなかったのでバックアップされませんでした。"
                $backupActivity += $timestamp + $activity
        }
    }
    else {
        Copy-Item -Path $sourceFilePath -Destination $destinationFilePath
                $activity = " '$($file.Name)' 新しいバックアップが作られました。"
                $backupActivity += $timestamp + $activity
   }
       $backupActivity | Out-File -FilePath $logFilePath -Append

}

手順

  1. 上のPS1スクリプトをドキュメントフォルダなどに保存します。

  2. タスクスケジューラに登録します。以下のコピペでOKです。

.ps1
$scriptPath = "$env:USERPROFILE\Documents\ExcelBackup.ps1"
$taskName = "ExcelBackupTask"
$taskDescription = "3分おきにExcelをバックアップ"
Register-ScheduledTask -TaskName $taskName -Action (New-ScheduledTaskAction -Execute 'PowerShell.exe' -Argument "-File `"$scriptPath`"") -Trigger (New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 3) ) -Description $taskDescription -User "SYSTEM"

image.png

結果のイメージ

ログも同じフォルダに出力されています。

image.png

注意点

・自動回復ファイルは、Excelを開きなおしたときに初めて生成されるようで、すぐに消してしまうと1分もないのでバックアップが間に合わないかもしれません。
・PCのパフォーマンスに影響がなければタスクを5秒おきとかにすればよいと思います。(New-TimeSpan -Seconds 5)
・5秒のタスクを24時間回すのが気になる場合は、「Get-ProcessでExcelプロセスが存在した場合に初めて実行する」スクリプトにしても良さそうです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0