フリーの検索コマンド"findf.exe"

DOSコマンドにはファイルを検索するコマンドが無い。そこでフリーのコマンドを使ってるのだが、このコマンド、ファイルサイズなんかを出力するオプションをつけて実行するとエラーが起きる。

ということで、自作。(適当+局地戦専用)

#include
#include
#include

void shlist(char* dir){
  WIN32_FIND_DATA FindFileData;
  HANDLE hFind;
  TCHAR PATH[1025];
  TCHAR NEXT[1025];

  lstrcpy(PATH, dir);

  hFind = FindFirstFile(lstrcat(PATH,"\\*"), &FindFileData);
  if ( hFind != INVALID_HANDLE_VALUE ){
    if ( (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY) {
      printf("%s\\%s,%d\n", dir , FindFileData.cFileName , (int)FindFileData.nFileSizeLow);
    }else if(strcmp(FindFileData.cFileName,".") != 0 && strcmp(FindFileData.cFileName,"..") != 0 ){
      lstrcpy(NEXT, dir);
      lstrcat(NEXT,"\\");
      lstrcat(NEXT,FindFileData.cFileName);
      shlist(NEXT);
    }
    while ( FindNextFile( hFind , &FindFileData ) != 0 ) {
      if (( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY) {
        printf("%s\\%s,%d\n", dir , FindFileData.cFileName , (int)FindFileData.nFileSizeLow);
      }else if(strcmp(FindFileData.cFileName,".") != 0 && strcmp(FindFileData.cFileName,"..") != 0 ){
        lstrcpy(NEXT, dir);
        lstrcat(NEXT,"\\");
        lstrcat(NEXT,FindFileData.cFileName);
        shlist(NEXT);
      }
    }
    FindClose(hFind);
  }
}

int main(int argc, char* argv[])
{
  if ( argc != 2 ) return 1;
  shlist(argv[1]);

  return 0;
}

ほとんど人様のコードの丸写し。(笑)
unixの多彩なオプションは全てカット、ファイル名とサイズの表示しかできません。