web-dev-qa-db-ja.com

Windowsコマンドプロンプト:現在のディレクトリ内のすべてのファイルの数を取得する方法?

cmd.exeで現在のディレクトリにあるファイルの数を調べるには、どのコマンドを使用しますか?

ここにpowershellオプションはありますか?

pdate:現在のディレクトリに10,000以上のファイルがあることを知っているので、dirを避けたいと思っていました。コマンドウィンドウへの列挙出力を回避したいと考えていました。ありがとうございました!

24
p.campbell

cmdを使用したい場合は、次の簡単な方法で実行できます。

set count=0 & for %x in (*) do @(set /a count+=1 >nul)
echo %count%

これはコマンドラインを想定しています。あなたがするバッチファイルで

@echo off
setlocal enableextensions
set count=0
for %%x in (*) do set /a count+=1
echo %count%
endlocal

これは少し良いことをします。 >nulは、バッチファイルから実行すると結果が表示されないため、バッチでset /aを削除できます。コマンドラインから直接実行します。さらに、forループの%記号を2倍にする必要があります。

人々がfind /cで気の利いたトリックを試してみる例をかなりたくさん見ました。 Be veryさまざまなことがこれを壊す可能性があるので、それらに注意してください。

よくある間違い:

  1. find /c /vを使用して、::など、ファイル名に決して含まれないものを見つけてみてください。しない。作業。確かに。コンソールウィンドウがラスターフォントに設定されている場合、これらの文字の組み合わせをできます。たとえば、:?などのファイル名に、全角のバリアントに文字を含めることができます。これにより、通常のASCIIに変換されます=これを壊すカウンターパート。正確なカウントが必要な場合は、これを試さないでください。

  2. find /cを使用して、alwaysがファイル名に含まれているものを見つけてみてください。ドット(.)は明らかに不適切な選択です。別の答えが示唆しています

    dir /a-d | find /c ":"
    

    これは、ユーザーのロケールについていくつかのことを想定していますが、すべてが真であるとは限りません(問題について詳しく説明するコメントを残しました)。1つの結果が多すぎます。

一般に、dir /bfindを使用すると、ファイル名以外のものはすべて削除され、fencepostエラーが回避されます。

したがって、エレガントなバリアントは次のようになります。

dir /b /a-d | find /c /v ""

最初にすべてのファイル名を1行ずつ出力します。そして、その出力の空でないすべての行を数えます。ファイル名を空にすることはできません(私が何か不足している場合を除きますが、私のテストによれば、Unicodeはこれをトリップしません)。

28
Joey

質問し、あなたが受け取るもの: http://technet.Microsoft.com/en-us/library/ee692796.aspx

フォルダ内のアイテムの数を数える

さて、あなたは何を知っていますか?太陽がようやく出てきているように見えます。つまり、私たちが行く時間です。ただし、その前に、Get-ChildItemコマンドレットを使用した最後のちょっとしたトリックを見てみましょう。場合によっては、フォルダー内のファイルについて多くを知る必要がないことがあります。あなたが本当に知る必要があるのは、特定のフォルダにあるファイルの数(もしあれば)だけです。フォルダ内のファイル数をすばやく数える方法は次のとおりです。

(Get-ChildItem C:\Scripts).Count

ここで何をしているのですか? Get-ChildItemを使用して、C:\ Scriptsフォルダーにあるすべてのアイテムのコレクションを返すだけです。これはコレクションなので、コレクション内のアイテムの数を示すCountプロパティの値をエコーバックするだけです。括弧の使用に注意してください。Get-ChildItemコマンドを括弧で囲んで、Windows PowerShellが最初にコレクションを取得し、次にそのコレクションのCountプロパティの値をエコーバックするようにします。

そしてもちろん、Get-ChildItemを呼び出すときにフィルターを含めることができます。 C:\ Scriptsフォルダーにある.PS1ファイルの数を知る必要がありますか?オーケードーク:

(Get-ChildItem C:\Scripts -filter "*.ps1").Count

参考までに、私は「powershell count files」をググった。

17
Trevoke
dir /a-d | find "File(s)"

このような単純なファイル操作にPowerShellを使用することに関する警告の言葉-特にネットワーク接続を介して、またはディレクトリに数千のファイルがある場合、cmd.exeに比べて信じられないほど遅いです。詳細は このフォーラムの投稿 を参照してください。

8
rossnz

dirを使用すると、下部に合計ファイル数が表示されます。

7
lorenzog

私が見つけた最速の方法は、PSコンソールで以下を実行することです。

[System.IO.Directory]::GetFiles($path).Count

$ pathはローカルパスまたはUNC共有です。

7
John Brooks

dir/Bの出力(ディレクトリを含む)から行を数えるだけです。
dir /B | find /c /v "~~~"

カウントファイルのみ(dirsなし):
dir /A-D /B | find /c /v "~~~"

3
Garcia

ネット上で this が見つかりました:

dir /a-d | find /c ":" > NUMfiles.###
set /p count=<NUMfiles.###
echo %count%

私はテストし、それは動作するようです。

2
Kelsey

上記のTrevokeのPowerShell回答を使用する可能性のある人への警告( Windowsコマンドプロンプト:現在のディレクトリ内のすべてのファイルの数を取得する方法? ):設計により、によって返されたコレクションのCountプロパティをエコーし​​ます値が1または0の場合、Get-ChildItemは誤解を招く結果をもたらす可能性があります。これは、Countプロパティが配列でのみ使用できるためです。 Get-ChildItemが返すアイテムが2つ未満の場合、結果はスカラーになり、.Countは何も返しません。これを回避するには、明示的に配列にキャストします(例:@(Get-ChildItem C:\ Scripts).Count)。

詳細については、 http://connect.Microsoft.com/PowerShell/feedback/details/354672/get-childitem-count-problem-with-one-file または http: //www.vistax64.com/powershell/266379-get-childitem-count-not-working-one-file.html

2
Heather M.

dirは、下部にあるファイルとディレクトリの数を返します

0
dyasny

DIrはもちろん機能します

サーバーに何かをインストールせずに、ワークステーションにPowerShellをインストールしなくても、次のことができます。

(gwmi -computer theserver -query "select *from cim_datafile where path = '\\'").count

このコマンドは、すべてのファイル(システムと隠しファイルが含まれます)を提供します。前述のように、powershellがマシン上にある場合は、簡単に

(GCI c:\*.*).count

を含めない場合、すべてのファイルとすべてのディレクトリの数が表示されることに注意してください。すべてをカウントするために-forceを追加する必要がある隠しファイルとシステムファイルは含めません

0
Jim B

これが必要なのは一度だけdirを使用する場合で、それ以外の場合は自分で自分自身をロールバックすることを検討します。これはおそらくC#アプリです(VBScriptまたはPowerShellも実行可能です)。

(ちなみに、cmd.exeを使用している場合、DOSではありません)

0
Maximus Minimus

Attribを使用してファイル数を取得できると思います:

attrib.exe /s /D *.*|find /c /v "" >> filecount.txt

これにより、現在のディレクトリ内にfilecount.txtというファイルが作成され、現在のディレクトリ内のファイルとフォルダの数(新しく作成されたファイルを含む)が含まれます。あなたは変えることができます

*.*

<full_path>\*.*

特定のディレクトリのファイル数を取得するため。フォルダを数えたくない場合は、「/ D」オプションを削除してください。 「/ s」オプションは、指定されたパスのすべてのディレクトリのファイルを処理します。そのため、指定したパスにのみファイルが必要で、サブフォルダーにファイルを含めない場合は、削除してください。

たとえば、サブフォルダーではなくC:\ドライブにあるファイルの数を知りたい場合は、次のコマンドを使用します。

attrib.exe C:\*.* | find /c /v "" >> filecount.txt
0
smoak