Windowsの最新スクショのパスをPowershellとwslで得る

スクショのフォルダで作成日時が最新のファイルパスを得ればいいだけ・・・だよね

## TL;DR

`code $profile`してpowershellの設定ファイルに以下を追加

```powershell:Microsoft.PowerShell_profile.ps1
function scr(){
  $screenshotPath = @(
      "$env:USERPROFILE\Pictures\Screenshots",
      "$env:USERPROFILE\OneDrive\画像\Screenshots"
  ) | Where-Object { Test-Path $_ } | Select-Object -First 1

  Get-ChildItem $screenshotPath -File | Sort LastWriteTime -Desc | Select -First 1 -Expand FullName
}
```

wsl側で`.bashrc`とかに以下を追加

```sh:.bashrc
alias scr='wslpath "$(pwsh.exe -Command scr)" | iconv -f CP932 -t UTF-8 | sed "s/ /\\\\ /g"'
```

これで`scr`と入力すれば最新スクショのパスを得られる
(OneDrive使ってない場合は動かないかも？)

## かんきょう

環境はこんな感じだけどそれ以外でもたぶん動く:

- Windows 11
  - PowerShell: pwsh.exe 7.5.0
- wsl 2
  - ubuntu 24.04
  - bash 5.2.21

pwsh.exeインストールしてない場合はしたほうがいい
`winget install -eh Microsoft.PowerShell`

## スクショが保存されるフォルダ

OneDrive使ってるかどうかでこのどっちかのフォルダにスクショが保存されるはず
(OneDrive使ってない方は合ってるか知らんけど)

- OneDrive有り: `C:\Users\<<ユーザー名>>\OneDrive\画像\Screenshots`
- OneDrive無し: `C:\Users\<<ユーザー名>>\Pictures\Screenshots`

このユーザー名までのパスは`$env:USERPROFILE`で得ることができる

## powershell

上のフォルダがあるかないかで分岐して、最新のファイルパスを表示する関数を作る

```powershell
function scr(){
  $screenshotPath = @(
      "$env:USERPROFILE\Pictures\Screenshots",
      "$env:USERPROFILE\OneDrive\画像\Screenshots"
  ) | Where-Object { Test-Path $_ } | Select-Object -First 1

  Get-ChildItem $screenshotPath -File | Sort LastWriteTime -Desc | Select -First 1 -Expand FullName
}
```

これをpowershellの設定ファイルに書いておけば`scr`と打つだけでスクショのパスを得られる
設定ファイルは`code $profile`すればすぐ編集できる

## wsl

上の設定をしておいたならwsl側では`pwsh.exe -Command 'scr'`すると同じことを実行できる
それをwslのパスに変換するにはwslpathを使うが、日本語が文字化けするのでiconvする
そしてついでにスペースをエスケープする

これを`.bashrc`に書き込んでおく

```sh:.bashrc
alias scr='wslpath "$(pwsh.exe -Command scr)" | iconv -f CP932 -t UTF-8 | sed "s/ /\\\\ /g"'
```

単純に`ls`してもいい
ユーザー名得るのは`pwsh.exe -Command $env:USERNAME`でできるけど、それだとpwsh経由して意味ないので絶対パスを直接書き込んでる。他良い方法あれば教えてほしい

```
ls -td /mnt/c/<<USERNAME>>/inarb/OneDrive/画像/Screenshots/* | head -n 1
```

## 使ってみる

powershell

```
PowerShell 7.5.0
PS>scr
C:\Users\<<ユーザー名>>\OneDrive\画像\Screenshots\スクリーンショット 2025-03-17 004458.png
```

wsl

```
$ scr
/mnt/c/Users/<<ユーザー名>>/OneDrive/画像/Screenshots/スクリーンショット\ 2025-03-17\ 004458.png
```

## で、何に使いたかったか

っていうと、ollamaにコピペした画像をすぐ渡したかった
win + shift + sして以下の画像をスクショした

[『メダリスト（１）』（つるまいかだ）｜講談社コミックプラス](https://kc.kodansha.co.jp/product?item=0000344550)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18902/8da5d95c-d2e7-4c54-9189-b2cd52779721.png)

gemma3がけっこうちゃんと喋れるので文字おこしにも使えるか試したかった
自分の環境: CPU Ryzen 3700X, メモリ64GB(DDR4-3200), RTX4070TiSUPER(VRAM16GB)

`gemma3:4b`だとすぐ終わるかわりに変なこと言ってる、けど文字おこし頼んだらわりとちゃんと読んでくれる

```
$ ollama run gemma3:4b "これ何の画像？ $(scr)"
Added image '/mnt/c/Users/<<ユーザー名>>/OneDrive/画像/Screenshots/スクリーンショット 2025-03-17 020035.png'
この画像は、漫画「 skaters 」の表紙です。

*   **タイトル:** スケートリズム (1)
*   **作者:** 氷川凜太郎
*   **ジャンル:** アニメ、受賞作
```

`gemma3:27b`だとけっこう時間かかるしPCめっちゃ重くなるけど一応ちゃんと説明してくれる
urlはぜんぜん違う、ってか画像を渡しただけだからurlまで知ってたらこわ

```
$ ollama run gemma3:27b "これ何の画像？ $(scr)"
Added image '/mnt/c/Users/<<ユーザー名>>/OneDrive/画像/Screenshots/スクリーンショット 2025-03-17 020035.png'
これは、漫画「メダリスト」の第1巻の表紙画像です。

作者はつるまいかださんで、フィギュアスケートをテーマにした作品です。

詳細はこちらで確認できます。
[https://www.kadokawa.co.jp/product/322303100216/](https://www.kadokawa.co.jp/product/322303100216/)
```

参考: [Ollama で Gemma 3 による画像認識 #Python - Qiita](https://qiita.com/7shi/items/c0255409aa28c1b2e1a0)