結論
後述のバッチをタスクスケジューラに登録する。
やりたいこと
Photoshop CC 2018だけ、ジャンプリストを非表示にしたい。できればリアルタイムで。
方法
アプリケーション毎にあるジャンプリストファイルを既定の場所から削除すればよい。ただしアプリケーションが独自に実現している履歴については、別途対策が必要。
ジャンプリストファイルを一定間隔で監視し、生成されたら削除するために、robocopyを使ったバッチファイルを作り、それをタスクスケジューラに登録した。
調べたこと
ジャンプリストファイルがある場所
%AppData%/Microsoft/Windows/Recent/AutomaticDestinations
アプリケーション毎のジャンプリストファイル名
- ファイル名は
アプリケーション毎のID.automaticDestinations-ms
- 上記フォルダを更新日時(降順)に並び替え、目的のアプリケーションで何かを開いてみる。するとジャンプリストが更新され、目的のジャンプリストファイルが一番上に来る。
- 同時に複数更新された場合、5f7b5f1e01b83767やf01b4d95cf55d32aはエクスプローラー関連であるので、それ以外。
robocopyのオプション
- /MOV 指定ファイルだけを削除するオプションは見当たらなかったため、指定ファイルだけを移動することに。
- /MOT:5 /MON:1 MOT分待機し、その間にMON回変更があれば操作を行う。
- /R:1 /W:10 操作に失敗した場合、W秒待機し、R回リトライする。
- /NP /NDL /NFL パス、ディレクトリ、ファイル名を非表示にする。
リストから読み込み実行
- アプリケーション名とジャンプリストファイル名を併記したリストを作成し、それをfor文で読み込ませる。
ウィンドウを非表示にして実行
- タスクスケジューラにバッチファイルを登録する際、対象バッチファイルを以下のように指定する。
powershell -WindowStyle Hidden -command "cmd /c バッチファイル(フルパス)"
- バッチファイル内で実行するコマンドをバックグラウンドで非表示にして実行するには、コマンドの前に
start /b
をつける。
作成したバッチファイル
move-JumpList.bat
@echo off
set pathSource=%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations
set pathMoveRoot=%USERPROFILE%\Documents\config\JumpList
set pathList=%pathMoveRoot%\targetlist
set pathDestination=%pathMoveRoot%\files
set pathLog=%pathMoveRoot%\log
set nameSource=%pathList%\TargetJumpList.txt
set nameLogfile=%pathLog%\move-JumpList
set optionCopy=/MOV /NP /NDL /NFL /MOT:5 /MON:1 /W:10 /R:1
call :exec
:end
exit /b
:exec
for /f "delims=, tokens=1,2" %%A in (%nameSource%) do (
rem @echo token1=%%A token2=%%B
start /b robocopy "%pathSource%" "%pathDestination%" "%%B" %optionCopy% /LOG+:"%nameLogfile%_%%A.txt"
)
exit /b
使い方
1.お好みの形でフォルダを作る。サンプルそのままの場合はこう。サンプル通りにしない場合はバッチファイルを書き換える。
ドキュメントフォルダ
+---config(特に意味はないがサンプル通りにするなら作る)
+---JumpList(便宜上のルートフォルダ)
+---targetlist(処理対象リスト置き場)
+---files(ジャンプリストファイルの移動先)
+---log(ログファイル出力先)
2.処理対象リスト置き場フォルダに処理対象リストを作る
書式:アプリケーション名(カンマ禁止),ジャンプリストファイル名
TargetJumpList.txt
Adobe Photoshop CC 2018,bb2c0b38d42e8e9d.automaticDestinations-ms
3.必要があればバッチファイルを書き換える
set pathSource=(ジャンプリストファイルがあるフォルダ)
set pathMoveRoot=(便宜上のルートフォルダ)
set pathList=(処理対象リスト置き場)
set pathDestination=(ジャンプリストファイルの移動先)
set pathLog=(ログファイル出力先)
set nameSource=(ジャンプファイルリスト名)
set nameLogfile=(ログファイル名の前半部分)
set optionCopy=(ログ以外のrobocopyオプション)
4.タスクスケジューラに登録する
- トリガーは自分のユーザーアカウントログオン時、遅延はお好みで。
- 操作はプログラムの実行
powershell -WindowStyle Hidden -command "cmd /c バッチファイル(フルパス)"
etc
- 負荷はあまり考慮していないので、様子を見たい。
- ログファイルは必要なのだろうか。必要なければ
/LOG+:"%nameLogfile%_%%A.txt"
を消す。
以上