ってなわけで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で表示できない文字が含まれるパスの画像ファイルは検索できていない。
調べるとecho
やif 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バイトで簡略化した。