日々の作業でファイルのバックアップを取る際、「手動でコピーして日付をつけるのが面倒…」と感じたことはありませんか?
PowerShellを使えば、ファイルをスクリプトにドラッグ&ドロップするだけで、自動的にバックアップを作成し、ファイル名の後ろに作成日時(yyyymmddhhmm形式)を追加することができます。
この記事では、初心者でもすぐに使えるPowerShellスクリプトを紹介し、設定手順から応用例までわかりやすく解説します。
PowerShellで自動バックアップを作る目的とメリット
PowerShellを使って自動バックアップを行う最大のメリットは、手間を減らし、ミスを防ぐことです。
例えば、毎回「コピー→リネーム→日付入力」という作業を手動で行うと、どうしても作業漏れや入力ミスが発生します。
PowerShellスクリプトを使えば、ファイルをドラッグ&ドロップするだけで、以下のように自動化できます。
- バックアップ先を指定して自動コピー
- ファイル名の末尾に日付(yyyymmddhhmm)を付加
- 既存ファイルと重複しないよう自動判別
このように、PowerShellのスクリプトを1本用意しておくだけで、日常業務の効率が格段にアップします。
スクリプトの動作イメージ
たとえば、以下のようなファイルをドラッグ&ドロップします。
C:\Users\User\Documents\report.xlsx
このスクリプトを通すと、自動的に次のようなファイルがバックアップフォルダに作成されます。
C:\Backup\report_202510111230.xlsx
ここで「_202510111230」は「2025年10月11日12時30分」を意味します。
つまり、いつ作成したバックアップか一目でわかります。
PowerShellスクリプトのサンプルコード
以下のコードをメモ帳などに貼り付け、「backup.ps1
」という名前で保存してください。
# PowerShell バックアップスクリプト
# ファイルをドラッグ&ドロップすると、自動でコピーして日付付きファイル名にする
param (
[Parameter(Mandatory = $true, ValueFromRemainingArguments = $true)]
[string[]]$files
)
# バックアップ先フォルダを指定(必要に応じて変更)
$backupFolder = "C:\Backup"
# バックアップ先が存在しない場合は自動作成
if (!(Test-Path $backupFolder)) {
New-Item -ItemType Directory -Path $backupFolder | Out-Null
}
# 現在の日時を yyyymmddhhmm 形式で取得
$timestamp = Get-Date -Format "yyyyMMddHHmm"
foreach ($file in $files) {
if (Test-Path $file) {
$fileName = [System.IO.Path]::GetFileNameWithoutExtension($file)
$extension = [System.IO.Path]::GetExtension($file)
$destination = Join-Path $backupFolder "$fileName" + "_" + "$timestamp" + "$extension"
# ファイルコピー実行
Copy-Item $file $destination -Force
Write-Host "バックアップ完了: $destination"
}
else {
Write-Host "ファイルが見つかりません: $file"
}
}
Pause
スクリプトの使い方
- 上記コードをコピーしてメモ帳に貼り付けます。
- 「backup.ps1」として保存します。
(例:デスクトップ上に保存) - 「C:\Backup」フォルダを自動作成します。
(スクリプト実行時に自動で作られます) - 保存したスクリプトに、バックアップしたいファイルをドラッグ&ドロップします。
これで、スクリプトが自動的にバックアップファイルを作成します。
実行時に警告が出る場合の対処法
初めてPowerShellスクリプトを実行する場合、スクリプト実行ポリシーの制限により警告やエラーが表示されることがあります。
その場合は、PowerShellを管理者として起動し、以下のコマンドを実行してください。
Set-ExecutionPolicy RemoteSigned
「Y
」を押してEnterキーを押せばOKです。
これにより、ローカルで作成したスクリプトを安全に実行できるようになります。
コードの解説
スクリプトのポイントを理解しておくと、今後の応用にも役立ちます。
部分 | 役割 |
---|---|
param() | ドラッグ&ドロップしたファイルのパスを受け取る部分 |
$backupFolder | バックアップ先フォルダを指定 |
Get-Date -Format "yyyyMMddHHmm" | 日付と時刻をフォーマットして取得 |
[System.IO.Path] | ファイル名と拡張子を分離 |
Copy-Item | 実際にファイルをコピーする処理 |
Pause | 結果を確認できるよう、一時停止 |
応用編:フォルダ全体をバックアップしたい場合
複数のファイルではなく、フォルダ全体をドラッグ&ドロップしてバックアップしたい場合も、少しコードを変えるだけで対応できます。
param (
[Parameter(Mandatory = $true, ValueFromRemainingArguments = $true)]
[string[]]$paths
)
$backupFolder = "C:\Backup"
if (!(Test-Path $backupFolder)) {
New-Item -ItemType Directory -Path $backupFolder | Out-Null
}
$timestamp = Get-Date -Format "yyyyMMddHHmm"
foreach ($path in $paths) {
if (Test-Path $path) {
$name = Split-Path $path -Leaf
$destination = Join-Path $backupFolder "$name" + "_" + "$timestamp"
Copy-Item $path $destination -Recurse -Force
Write-Host "フォルダのバックアップ完了: $destination"
}
}
Pause
このスクリプトでは、指定したフォルダ全体を再帰的にコピーします。
応用編:バックアップ先を日付ごとにフォルダ分け
バックアップを整理したい場合は、「日付フォルダ」を作る方法もあります。
$todayFolder = Join-Path $backupFolder (Get-Date -Format "yyyyMMdd")
New-Item -ItemType Directory -Path $todayFolder -Force | Out-Null
上記をスクリプトに追加することで、バックアップ先が次のように整理されます。
C:\Backup\20251011\report_202510111230.xlsx
よくあるエラーと対処法
エラー内容 | 原因 | 対処法 |
---|---|---|
「スクリプトの実行が無効です」 | 実行ポリシー制限 | Set-ExecutionPolicy RemoteSigned を実行 |
「アクセスが拒否されました」 | 書き込み権限がない | 管理者権限で実行 |
「ファイルが見つかりません」 | ドラッグしたパスが無効 | ファイルのパスを確認 |
まとめ
PowerShellを使えば、
- ファイルをドラッグ&ドロップするだけで
- 自動的にバックアップを取り
- ファイル名に日付を付ける
という仕組みを簡単に実現できます。
一度スクリプトを用意しておけば、日々のファイル管理がとても楽になります。
作業ミスを防ぎ、効率的にファイルを整理したい方は、ぜひこの方法を活用してみてください。
💡ポイントまとめ
Get-Date -Format "yyyyMMddHHmm"
で日付を自動付与Copy-Item
で簡単にバックアップ- フォルダ分け・自動整理など応用も自在