有馬総一郎のブログ

(彼氏の事情)

2014年03月02日 19:49:00 JST - 1 minute read - MS-DOS

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

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

find_png_file.bat

@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コマンドでコマンド結果を格納した時に変わってしまっているようだ。

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バイトで簡略化した。