電子書籍の厳選無料作品が豊富!

WindowsNTでは、attribコマンドに/dがないのですが、コマンドラインで再帰的にフォルダの階層を辿って、フォルダの読み取り属性を解除したい場合、どうすればよいでしょうか?プログラム内で利用するのでエクスプローラーは使えないのです。よろしくお願いします。

A 回答 (3件)

#2です。



サンプルのstrcpyの引数が逆でした。あと、FindCloseの関数名も間違ってました。

 strcpy(StartDirStr,FindDir);
 ↓
 strcpy(FindDir,StartDirStr);

   strcpy(StartDirStr,FileName);
   ↓
   strcpy(FileName,StartDirStr);

  FindCloseFile(FHdl);
  ↓
  FindClose(FHdl);
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
残念ながらVC++もVBも持っていないのです。別の所でバッチで簡単に出来る方法を教えてもらえたので、そちらを採用したいと思います。

お礼日時:2004/04/26 21:18

>attrib -h -s -r folder1 /s


>とした時に、folder1,folder2,folder3のread onlyが
>解除できないのをなんとかできないかと聞いています。

「フォルダそのものに付いた属性も」と言う事でしたか。

そうであれば
attrib -h -s -r folder1 /s
では出来ませんね。

プログラム内で使用するとの事ですから、API関数の
FindFirstFile
FindNextFile
FindClose
SetFileAttributes
を使って、自力でコーディングするのが早いと思います。

どの言語を使うか判りませんが、Cで書いたサンプルを載せておきます。

/* StartDirStr は C:\ か C:\dir\ のように \ で終るディレクトリを指定 */
void ClearAttrib(LPCTSTR StartDirStr)
{
 WIN32_FIND_DATA FindData;
 TCHAR FindDir[ MAX_PATH ];
 TCHAR FileName[ MAX_PATH ];
 HANDLE FHdl;
 BOOL Sts = TRUE;
 strcpy(StartDirStr,FindDir);
 strcat(FindDir,"*.*");
 FHdl = FindFirstFile(FindDir,&FindData);
 if (FHdl != INVALID_HANDLE_VALUE) {
  while (Sts) {
   strcpy(StartDirStr,FileName);
   strcat(FileName,FindData.cFileName);
   if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
    /* ディレクトリ . と .. は何もしない */
    if ((strcmp(FindData.cFileName,".") != 0) && (strcmp(FindData.cFileName,"..") != 0)) {
     SetFileAttributes(FileName,FILE_ATTRIBUTE_NORMAL);
     strcat(FileName,"\\");
     ClearAttrib(FileName); /* 再帰コール */
    }
   } else {
    SetFileAttributes(FileName,FILE_ATTRIBUTE_NORMAL);
   }
   Sts = FindNextFile(FHdl,&FindData);
  }
  FindCloseFile(FHdl);
 }
}
    • good
    • 0

NTのコマンドプロンプトで


attrib /?
とか
attrib /S
とか試してみましたか?

うちのNT(4.0Server)では
attrib -R /S
で出来ましたが。

因みに /S と -S は違う働きをします。

殆どのコマンドはコマンドオプションに /? だけを付けるとヘルプの説明が出るので、まずはヘルプを見ましょう。

この回答への補足

/sと-sの違いは知っています。

folder1\folder2\folder3\file

とフォルダとファイルがあって、フォルダは全てread onlyになっています。一番上のフォルダで、
attrib -h -s -r folder1 /s
とした時に、folder1,folder2,folder3のread onlyが
解除できないのをなんとかできないかと聞いています。

SPとかによるのかもしれませんので、出来たbuild noやsp6aをあてたかどうかを教えてもらえますか?

補足日時:2004/04/23 12:36
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!