タイトルの内容ですが、まずはこちらの記事をご覧いただければ幸いです。
Windows11からVBSが非推奨になってまして、VBSで一生懸命書いたコードもお蔵入り…。
と悩んでましたが、「Powershellで書けばええやんけ」と思い立ったが吉日。書き直しました。
ドラッグアンドドロップだけでファイルのバックアップを作成するPowershellツール
使い方はVBSのとほぼ同じですが、一点だけ大きく違います。
sendtoに拡張子ps1ファイルを入れても、マウス右クリックメニューの送るに表示されません。
解決策としては、batファイルを噛ませることです。
さっそくコードを見ていきましょう。まずはPowershellから。
reCopy.ps1のファイル名で保存してください。(ファイル名のセンスはアレですが)
Add-Type -AssemblyName Microsoft.VisualBasic
Add-Type -AssemblyName System.Windows.Forms
if ($args.Count -eq 0) {
[System.Windows.Forms.MessageBox]::Show("バックアップしたいファイルをこのアイコンにドロップしてください", "使い方", 'OK', 'Information')
exit
}
# 1. バックアップフォルダの入力ボックスを表示
$backupDir = [Microsoft.VisualBasic.Interaction]::InputBox(
"バックアップフォルダを指定してください(空欄なら元フォルダに保存されます)",
"バックアップ先の指定",
""
)
# 2. フォルダ指定があれば作成(なければ元フォルダ使う)
if (-not [string]::IsNullOrWhiteSpace($backupDir)) {
if (-not (Test-Path $backupDir)) {
New-Item -Path $backupDir -ItemType Directory | Out-Null
}
}
# 3. 各ファイルをバックアップ処理
foreach ($file in $args) {
if (-not (Test-Path $file)) { continue }
$source = Get-Item $file
$sourceFolder = Split-Path $source.FullName
$basename = [System.IO.Path]::GetFileNameWithoutExtension($source.Name)
$ext = $source.Extension
$date = Get-Date -Format "yyyyMMdd"
$targetFolder = if (-not [string]::IsNullOrWhiteSpace($backupDir)) { $backupDir } else { $sourceFolder }
$filename = "$basename" + "_$date$ext"
$destPath = Join-Path $targetFolder $filename
Write-Host "`nコピー元: $($source.FullName)"
Write-Host "コピー先: $destPath"
if ($source.FullName -ne $destPath) {
Copy-Item -Path $source.FullName -Destination $destPath -Force
} else {
Write-Host " コピー元とコピー先が同じなのでスキップ"
}
}
続いてbatファイルです。
reCopy.batのファイル名で保存してください。(ファイル名のセンス…)
@echo off powershell -ExecutionPolicy Bypass -File "%~dp0reCopy.ps1" %* # pause #デバッグ用
ツールの使い方
① Windowsキー+Rキーを押し”Shell:sendto”を入力してSendtoフォルダを開きます。
② SendtoフォルダにreCopy.ps1とreCopy.batファイルを保存してください。
③ 適当なファイルを右クリックし、送る>reCopy.bat を選択してください。
バックアップファイルが作成されます。複数ファイルも可能です。
著作権等
プログラムをカスタマイズして2次利用する際は当ブログへのリンクをお願いします。
商用利用は禁止です。

