はじめに
Yoloのデータリストを作成しようとしたとき、
そういえばWindowsのfindコマンドってなんだろうと思い調べました。
dirコマンド
一番覚えやすそうなコマンド。
拡張性はないが簡単に使うだけなら十分。
> dir /s /b data\img\*.jpg
C:\Users\User\Documents\data\img\cat_1.jpg
C:\Users\User\Documents\data\img\cat_2.jpg
C:\Users\User\Documents\data\img\cat_3.jpg
.....
whereコマンド
検索パターンに一致するファイルの場所を表示するコマンド
明示的にディレクトリを指定しないとPATH(環境変数)直下も検索検索対象になる上、
明示的にディレクトリを指定する場合、再帰的に検索が走る。
使いにくい。
> where /r .\data *.jpg
C:\Users\User\Documents\data\img\cat_1.jpg
C:\Users\User\Documents\data\img\cat_2.jpg
C:\Users\User\Documents\data\img\cat_3.jpg
.....
forfilesコマンド
条件に当てはまるファイルを指定ディレクトリから探し、処理を行うコマンド
・ドキュメント
オプションも多く拡張性が高い。
覚えにくいが使いこなせれば色々できそう。
パスをそのまま出力しようとするとダブルクォーテーションが付いてしまう。
> forfiles /p .\data\img /s /m *jpg /c "cmd /c echo @path"
"C:\Users\User\Documents\data\img\cat_1.jpg"
"C:\Users\User\Documents\data\img\cat_2.jpg"
"C:\Users\User\Documents\data\img\cat_3.jpg"
.....
相対パスで欲しい
forfilesコマンドで、パス名ではなくファイル名のみを取得、
それを出力部分でくっつけたいパスと結合、力業。。
> for /f %i in ('forfiles /p .\data\img /s /m *jpg /c "cmd /c echo @file"') do @echo data\img\%~i
data\img\cat_1.jpg
data\img\cat_2.jpg
data\img\cat_3.jpg
.....
ファイルに起こす場合は
追記を使う。
forで回しているので、ただ標準出力をリダイレクトすると最後の一行しか残らない。
> for /f %i in ('forfiles /p .\data\img /s /m *jpg /c "cmd /c echo @file"') do @echo data\img\%~i >> train.txt