Windows Spotlightの壁紙を保存する
割と良い感じの壁紙が多いので、スクリプトでローカルに保存してみた。ショートカットでも作っておいて、壁紙が良いと思ったら実行すれば幸せになれます。たぶん。
やりたいこと(冒頭ほぼそのまま)
- Windows Spotlightの壁紙を保存したい
- 同じ壁紙は同じファイル名にしたい
- 任意のフォルダに保存したい
- Windows10/11の標準のコマンドでかつbatファイルで書きたい
といことで、実装。
コードの詳細は大した事ないのでコメント見てください。以下、仕様です。
- desktop_wallpaperのフォルダに壁紙を保存します
- ファイルのMD5値を取得してファイル名にすることで、同じ壁紙は同じファイル名になります
- 最後に保存した壁紙をexplorerで開きます ※特大アイコン・作成日順にすると良い感じかも
@echo off
rem 一時作業フォルダ
set temp_wallpaper=%TMP%\copyWallpaper
rem 壁紙保管用フォルダ
set desktop_wallpaper=%USERPROFILE%\Pictures\wallpaper\windows_spotlight
rem 一時作業・壁紙保管用フォルダの作成
mkdir %temp_wallpaper% 2> NUL
mkdir %desktop_wallpaper% 2> NUL
rem 壁紙ファイルをそのMD5値をファイル名として一時フォルダにコピー
for /f "tokens=3 delims= " %%a in ('reg query "HKCU\Control Panel\Desktop" /v WallPaper') do (
for /f "tokens=1 delims= " %%h in ('certutil -hashfile %%a MD5') do (
copy /Y %%a %temp_wallpaper%\%%h.jpg >NUL 2>&1
)
)
rem 実装がヘボくてできてしまうゴミを削除(無念)
del %temp_wallpaper%\MD5.jpg
rem 一時フォルダに保存した壁紙ファイルを保管用フォルダにコピーして開く
for /f "tokens=1 delims= " %%a in ('dir /b %temp_wallpaper%') do (
xcopy /Y %temp_wallpaper%\%%a %desktop_wallpaper% >NUL 2>&1
explorer /select,%desktop_wallpaper%\%%~nxa
rem 一時フォルダの壁紙ファイルを削除
del /f %temp_wallpaper%\%%a
)
イケてないところ
- temp_wallpaerの一時フォルダは特に削除しないため、気になる人は最後のdelコマンドの行を一時フォルダを削除するように変更してね
- forにforを重ねてるあたりが美しくないけれども、私にはこれが限界でした
- certutilコマンドまたはbatファイルでの標準出力の絞り方がわからず、ゴミ(MD5.jpg)ができてしまう、けれども仕様です
- 多分Windows Spotlight以外だとうまく動かないと思います#拡張子が被る(.jpg.jpg的になる)くらいな気がするけれども
最後に
特に危ないことはしていないので(あえて言えばdelコマンド2か所)、Windowsが壊れるとかはないと思います。が、このスクリプトを利用したことで発生した損害・トラブル・不利益についてはご容赦ください。
それでは。