thư mục dir ở độ sâu thư mục nhất định trong một tệp bó


4

Tôi muốn, với một tệp bó, để có thể tìm kiếm và hiển thị các tệp trong một loạt các thư mục được gọi là "lỗi" nằm ở một loạt các địa điểm khác nhau.

Thư mục lỗi luôn ở cùng độ sâu thư mục nhưng tên thư mục cho chúng là khác nhau.

dir /A-d /b C:\Temp\*random_folder_name*\*random_folder_name*\error

Vì vậy, tôi có thể tạo một dòng hiển thị tất cả các tệp trong tất cả các thư mục lỗi, hai thư mục "bên dưới", trong ví dụ này "C: \ Temp" không? hoặc tôi phải thêm một dòng dir cho mỗi thư mục lỗi?

Câu trả lời:



1

Đây là một giải pháp tương đối đơn giản nhưng không hiệu quả bằng cách sử dụng FINDSTR với biểu thức chính quy. Tôi sử dụng [\\]để khớp \vì sự không nhất quán trên Vista.

@echo off
dir /b /s c:\temp\*|findstr /rix "c:[\\]temp[\\][^\\]*[\\][^\\]*[\\]error[\\][^\\]*"

Đây là một giải pháp phức tạp hơn nhưng rất hiệu quả bằng cách sử dụng nhiều câu lệnh FOR.

@echo off
for /d %%A in (c:\temp\*) do for /d %%B in ("%%A\*") do for %%C in ("%%B\error\*") do echo %%C

0

Bạn có thể cài đặt các thư viện GNU Win32 và sử dụng grep cho việc này:

dir /b /s *.*|grep "error\\[^\\]*$"

Cách được đề xuất để cài đặt chúng là với getgnuwin32 .

BTW, nếu bạn chỉ muốn xem các tệp văn bản thì nó sẽ như thế này:

dir /b /s *.txt|grep "error\\[^\\]*$"

Nếu bạn muốn đảm bảo rằng chỉ các thư mục ở độ sâu nhất định được sử dụng thì sẽ phức tạp hơn một chút:

dir /b /s *.*|grep "^\([^\\]*\\\)\{7\}error\\[^\\]*$"

Điều này sẽ chỉ hiển thị kết quả trong đó thư mục lỗi sâu bảy thư mục (từ thư mục gốc).


Bạn có chắc không? Regex cuối cùng có vẻ không chính xác. Tại sao các bạn thoát (, ), {, và }?
dbenham

Có, tôi chắc chắn rằng tôi đã thực sự thử nghiệm tất cả những thứ này trên hệ thống của mình. Tin tôi đi, những nhân vật đó cần thoát. Nó sẽ không hoạt động mà không có nó.
krowe

Xin lỗi, tôi đã quen sử dụng regex JavaScript. Đó là một sự lựa chọn thiết kế rất tò mò cho grep. Hầu hết các nhân vật meta được thoát nếu bạn muốn coi họ như một nghĩa đen. Nhưng trong grep, một số ký tự theo nghĩa đen được "thoát" để biến chúng thành các ký tự meta. Thật là điền rồ!
dbenham

Điều đó đã cho tôi một ý tưởng: gist.github.com/krowe/da2a6b021ac891f8e3be
krowe

Có, kịch bản lai là một cách mạnh mẽ để mở rộng khả năng hàng loạt. Tôi đã tạo ra một tiện ích JScript / batch khác nhau nhưng có liên quan được gọi là REPL.BAT . Nó cực kỳ hữu ích cho nhiều vấn đề khó giải quyết với lô thuần túy.
dbenham

0

Windows có các lựa chọn thay thế tích hợp cho grep: findfindstr.

findstrsẽ hỗ trợ biểu thức chính quy (bạn có thể nhận thêm thông tin bằng cách nhập help findstr), nhưng bạn sẽ bị giới hạn phần nào bởi đầu ra dirdường như không hỗ trợ danh sách tương đối ...

dir /A-d /S /B | findstr /B /R /I /X "C:\\Temp\\[^\\]*\\[^\\]*\\error\\.*"

Regex đó sẽ không hoạt động vì .*có thể khớp với bất kỳ số lượng \
dbenham nào vào

xin lỗi, đó là một lỗi ngớ ngẩn của tôi, xin vui lòng xem lại cập nhật của tôi.
robert
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.