Câu trả lời:
Không, MS-DOS chỉ hỗ trợ hai ký tự đại diện (dựa trên CP / M). Chúng là "*", biểu thị bất kỳ chuỗi ký tự nào và "?", Biểu thị một ký tự. Không có sự phân biệt của bảng chữ cái và chữ số trong các ký tự đại diện và không có sự hỗ trợ cho các biểu thức thông thường để buộc ký tự đại diện thành chữ số.
Câu trả lời cho câu hỏi theo nghĩa đen của bạn là 'không' - nhưng nếu câu hỏi thực sự của bạn là:
Tôi có thể bằng cách nào đó chỉ chọn các tệp có chứa một chữ số trong tên của họ dưới cmd?
sau đó nếu đó là bất cứ điều gì dựa trên (cụ thể hơn là W2k plus ) thì có thể thực hiện được. Bí quyết là sử dụng findstr, hỗ trợ các biểu thức chính đơn giản, để lọc ra kết quả.
dir /b |findstr /r "\.[0-9]"sẽ cho bạn kết quả tương tự như dirtrong ví dụ của bạn. Điều này có nghĩa là nó cũng sẽ trở lại file.1st.second(như dir sẽ).
Vấn đề nhỏ ở đây là nó sẽ chỉ liệt kê tên tệp, nhưng thậm chí có thể được giải quyết:
for /f %F in ('dir /b ^|findstr /r "\.[0-9]"') do @echo %~ftzaFsẽ in danh sách của bạn theo định dạng độc đáo dir. Lưu ý rằng nó phải được chạy trong thư mục hiện tại!
HOẶC ( những gì tôi muốn giới thiệu )
nếu bạn có powershellsẵn (hoặc bạn sẵn sàng cài đặt nó) kích hoạt nó và thực thi:
gi .\* |? {$_.name -match "\.[0-9]"}
Chỉnh sửa theo nhận xét của OP:
Điều này sẽ liệt kê các tệp bằng cách sử dụng for /r:
Đơn giản nhất, nhưng rất chậm (thực tế không thể sử dụng cho bất cứ thứ gì ngoại trừ một vài tệp), vì nó chạy findstrcho mọi dòng:
for /r "c:\temp" %F in (*) do @echo %~nxF | findstr /r "\.[0-9]" && echo %F
Phức tạp hơn, nhưng nhanh chóng (sử dụng các chuỗi được chuẩn bị đặc biệt để cho phép đường ống đến một trường hợp duy nhất của findstr:
for /f "tokens=2 delims=* eol=*" %F in ('^(for /r "directory_root" %F in ^(*^) do @echo %~nxF*%~dpnxF^) ^|findstr /r "\.[0-9].*\*"') do @echo %F
hoặc (có chức năng giống nhau, nhưng dễ đọc hơn:>)
(for /r "directory_root" %F in (*) do @echo %~nxF*%~dpnxF) | for /f "tokens=2 delims=* eol=*" %F in ('findstr /r "\.[0-9].*\*"') do @echo %F
Tất cả các ví dụ như chạy trực tiếp từ dòng lệnh
for /r.
?như một ký tự đại diện, không phải*. Có lẽ bạn có nghĩa là Dấu nhắc lệnh Windows (cmd.exe) thay thế?