你在錯誤的地方你的星號。我想你打算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)
[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%
[批處理文件的可能的複製 - 計數數文件夾和存儲在變量](http://stackoverflow.com/questions/11004045/batch-file-counting-number-of-files-in-folder-and-storing-in-a-variable) – 2016-11-29 09:43:34