cmd.exe
現在のディレクトリにあるファイルの数を調べるには、どのコマンドを使用しますか?
ここにPowershellオプションはありますか?
更新:dir
現在のディレクトリに10,000以上のファイルがあることを知っているので、回避したいと思っていました。cmdウィンドウへの列挙出力を避けたい。ありがとうございました!
cmd.exe
現在のディレクトリにあるファイルの数を調べるには、どのコマンドを使用しますか?
ここにPowershellオプションはありますか?
更新:dir
現在のディレクトリに10,000以上のファイルがあることを知っているので、回避したいと思っていました。cmdウィンドウへの列挙出力を避けたい。ありがとうございました!
回答:
でそれを実行したい場合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
二重にする必要があります。
私は人々が気の利いたトリックを試みるかなりの例を見ましたfind /c
。さまざまなことがこれを破ることができるので、それらには非常に注意してください。
よくある間違い:
などを使用find /c /v
して、ファイル名に決して含まれないものを見つけてみてください::
。しません。作業。確かに。コンソールウィンドウがラスターフォントに設定されている場合、これらの文字の組み合わせを取得できます。私は、次のようなファイル名の文字を含めることができ:
、?
これを破るだろう彼らの通常のASCIIの対応に変換されます例えば、その全幅変種で、など。正確なカウントが必要な場合は、これを試さないでください。
使用してfind /c
、常にファイル名に含まれる何かを見つけてみてください。明らかに、ドット(.
)は適切な選択ではありません。別の答えが示唆しています
dir /a-d | find /c ":"
これは、ユーザーのロケールについていくつかのことを想定していますが、そのすべてが真であることが保証されているわけではなく(問題の詳細をコメントとして残しています)、1つの結果を返しすぎます。
一般的に、あなたが使用したいfind
の上にdir /b
離れて、すべての非ファイル名のものをカットし、道というfencepostエラーを回避します。
したがって、エレガントなバリアントは次のようになります。
dir /b /a-d | find /c /v ""
最初にすべてのファイル名を1行ずつ出力します。そして、その出力の空でない行をすべてカウントします。ファイル名を空にすることはできないので(何かが足りない場合を除き、Unicodeは私のテストではこれをトリップしません)。
dir /b /a-d | find /c /v ""
%count%
解析時に展開されるため、おそらく失敗します。
AskとYeは以下を受け取ります: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」をグーグル検索しました。
(Get-ChildItem -recurse -filter "*.ps1").Count
dir /a-d | find "File(s)"
このような単純なファイル操作にPowerShellを使用することに関する警告の言葉-特にネットワーク接続やディレクトリに数千のファイルがある場合、cmd.exeに比べて信じられないほど遅いです。詳細については、このフォーラムの投稿を参照してください。
dir
下部に合計ファイル数が表示されます。
dir > file
..ああ、POSIXが恋しい
dir > file
Windowsで動作しない理由は何ですか?出力のリダイレクトはまったく魔法ではありません。
dir | grep (something)
は、画面上での書き込みが遅くなる(そして、それを完全に最小化する)ことを避けるために「ちょうど」できるからです。
私が見つけた最速の方法は、PSコンソールで次を実行することです。
[System.IO.Directory]::GetFiles($path).Count
$ pathはローカルパスまたはUNC共有です。
dir / B出力(ディレクトリを含む)から行を数えるだけです:
dir /B | find /c /v "~~~"
ファイルを数えるだけ(dirsなし):
dir /A-D /B | find /c /v "~~~"
ネット上でこれを見つけました:
dir /a-d | find /c ":" > NUMfiles.###
set /p count=<NUMfiles.###
echo %count%
私はテストし、うまくいくようです。
dir
コマンドにはファイルではないコロンが含まれる行が含まれているため、これはどのような場合でも1つずれています。(2)これはコロンを含む時間形式に依存しますが、コロンは必ずしもそうである必要はありません。(3)コロンを含まない数値形式に依存します。コロンは必ずしもそうである必要はありません。また、ここでファイルを調べることは不要であり、書き込みアクセス権がないと機能しません。これは悪い考えです。
上記のTrevokeのPowerShellの答えを使用する可能性のある人への注意点(Windowsコマンドプロンプト:現在のディレクトリ内のすべてのファイルの数を取得する方法?):設計により、Get-ChildItemによって返されるコレクションのCountプロパティをエコーすると、誤解を招く結果が生じる可能性があります値が1または0の場合。これは、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コマンドレットカウント-動作しない-1-file.html。
DIrはもちろん動作します
サーバーに何かをインストールせずに、ワークステーションにPowerShellをインストールすることなく、次のことができます。
(gwmi -computer theserver -query "select *from cim_datafile where path = '\\'").count
このコマンドは、すべてのファイル(システムと非表示を含む)を提供します。前述のように、powershellがマシン上にある場合は、単純に
(GCI c:\*.*).count
を含めない場合は注意してください。すべてのファイルとすべてのディレクトリの数を取得します。すべてをカウントするために-forceを追加する必要がある隠しファイルとシステムファイルは含めません。
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
私は似たようなことをしていますが、これは任意の数のファイルですぐに動作します。
Setlocal enabledelayedexpansion
Dir /A | find "File(s)" >tmp
For /F "tokens=1" %%i in (tmp) do set n=%%i
Del tmp
If !n! GEQ 10 echo Too many files in directory.
find
はお勧めできません。詳細については、受け入れられた回答を参照してください。