有馬総一郎のブログ

(彼氏の事情)

Windowsでpngデータの画像ファイルを検索する

ってなわけでWindowsバッチでpngファイルを探すバッチを作ってみた。

find_png_file.bat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    @echo off
    set dstfile=sample.jpg
    set binrslt=result.txt
    set listfle=png_file_list.txt
    type nul > "%listfle%"
    echo 1 > "%dstfile%"
    for /f "usebackq delims=" %%I in (`dir /s /b /a=-d "C:\My Music\*.jpg"`) do (
      if exist "%%I" (
        fc /b "%%I" "%dstfile%" | findstr "^0000000[0]" > "%binrslt%"
        for /f "usebackq tokens=2" %%C in ("%binrslt%") do (
          if "%%C" equ "89" (
            echo %%I>> "%listfle%"
          )
        )
      )
    )
    if exist "%dstfile%" del /f "%dstfile%"
    if exist "%binrslt%" del /f "%binrslt%"

しかし、ubuntuで叩いて出力した検索結果と比較すると、Björk、서문탁といったアーティストの画像ファイルが出力されてなかった。やはりmsdosの限界というかMS932で表示できない文字が含まれるパスの画像ファイルは検索できていない。

調べるとechoif existまでは正しく認識されているようだが、forコマンドでコマンド結果を格納した時に変わってしまっているようだ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
C:\Users\Arimasou16>C:\Users\Arimasou16>set file=C:\My Music\Björk\Vespertine\folder.jpg

C:\Users\Arimasou16>echo %file%
C:\My Music\Björk\Vespertine\folder.jpg

C:\Users\Arimasou16>if exist "%file%" echo OK
OK

C:\Users\Arimasou16>for /f "usebackq delims=" %I in (`echo %file%`) do echo %I

C:\Users\Arimasou16>echo C:\My Music\Bjork\Vespertine\folder.jpg
C:\My Music\Bjork\Vespertine\folder.jpg

C:\Users\Arimasou16>

まあ、取り敢えず簡易的には使えるだろう。面倒なので判定範囲も2バイトから1バイトで簡略化した。

Comments