web-dev-qa-db-ja.com

フォルダ内のファイルの数をすばやく数える方法は?

Windows 2003 Serverには、要求を処理し、2番目のプロセスが来て、これらの保存された要求を処理するキューとしてフォルダーに格納するアプリケーションがあります。ただし、ファイルの数が100,000に達する場合があります。

Windowsエクスプローラーまたはコマンドプロンプトでdirを使用しても、保存されているファイルの数を確認するための解決策にはならないようです。また、CPUとI/Oにも時間がかかりすぎます。

助言がありますか?

2
Andrei Rinea

この場合、私がこの小さなバガーを書くのを助けることができる組み込みのユーティリティがない場合:

using System;
using System.IO;

namespace FileCount
{
    class Program
    {
        static void Main(string[] args)
        {
            var files = Directory.GetFiles(".");
            Console.Write(files.Length);
        }
    }
}

しかし、私はこれをする必要がないことを望みました。皆さんのお陰で :)

更新:.NET(任意のバージョン)であり、言語はC#であると言うのを忘れました。

0
Andrei Rinea

これがそれほど大きなフォルダでどれだけ速く機能するかはわかりませんが、試してみる価値はあります。

以下のコードを.vbsファイルに保存します。次に、次のようなCMDプロンプトから実行します。

CSCRIPT FileCount.vbs C:\Insert\Your\Path\Here.

パスのルートにあるファイルのみをカウントしますが、サブフォルダーを含めるように変更することもできます。

Dim oArgs
Set oArgs = WScript.Arguments

If oArgs.Count >= 1 Then
   WScript.Echo FileCount(oArgs(0))   
End If

'------------------------------------------------------------
'
'------------------------------------------------------------
Function FileCount(sPath)
   Dim oFSO
   Dim oFolder
   Dim oFiles

   Set oFSO = CreateObject("Scripting.FileSystemObject")
   Set oFolder = oFSO.GetFolder(sPath)
   Set oFiles = oFolder.Files
   FileCount = oFiles.Count
End Function
2
aphoria

このページのスクリプト を使用して、次のように呼び出すことができます。

 call filecount.bat C:\temp filecount /S
 echo %filecount%

すべてのサブフォルダーを再帰的に検索する場合は、スイッチ「/ S」が必要です。

1
splattne