アスタリスクの位置が間違っています。私はあなたが意図したと思いますa*.txt
。ただし、これは名前が「a」で始まるテキスト ファイルと一致します。結果は、"a" で始まり、その後に数字が続くテキスト ファイルに限定されません。
DIR コマンドの結果を FINDSTR にパイプし、正規表現を使用してより具体的にすることができます。FINDSTR 正規表現のサポートは原始的ですが、多くの場合、これでうまくいきます。
「a1.txt」や「a143.txt」などの名前は一致させたいが、「a1b.txt」や「aba1.txt」などのファイルは一致させたくないと仮定します。私が間違っている場合は、要件に合わせて正規表現を変更する必要があります。
この正規表現\\a[0-9][0-9]*\.txt$
は次のように機能します。
\\
エスケープされたバックスラッシュで、ファイル名の前の最後のバックスラッシュに一致します
a
もちろんそれ自体に一致します
[0-9]
1 桁の数字に一致します (少なくとも 1 桁ある必要があります)
[0-9]*
0 個以上の追加の数字に一致
\.txt$
ドットをエスケープし、「.txt」拡張子に一致します。$ は文字列の末尾に一致します。追加の文字が続くと一致しません。
最後に、FINDSTR の結果を FIND にパイプして、ファイル数をカウントできるようにします。FIND /C /V ""
は任意の行に一致し、/C オプションは一致する行の数を示します。ループ内でカウンターをインクリメントするよりも効率的です。
@echo off
setlocal
set /a count=0
for /F %%N in ('dir/s/b/a-d "C:\Users\xyz\desktop\Project\a*.txt"^|findstr /ric:"\\a[0-9][0-9]*\.txt$"^|find /c /v ""') do set count=%%N
echo count=%count%