Windows tương đương với ký tự đại diện ls * (dấu hoa thị) ký tự đại diện?


14

Một câu hỏi khác từ một người dùng Unix / Linux lâu năm, người thấy mình trong thế giới Windows. Đầu tiên hãy để tôi giải thích chính xác những gì tôi đang cố gắng làm. Tôi đang sử dụng shell cmd.exe của Windows và tôi muốn liệt kê tất cả các thư mục bên dưới thư mục hiện tại có chứa cấu trúc phân cấp bin \ Debug và xác định xem chúng có chứa bất kỳ tệp nào không (ví dụ: cố gắng tìm hiểu xem mục tiêu sạch NAnt của tôi có làm việc đúng cách). Hệ thống phân cấp của tôi có thể trông giống như thế này:

\Current
    \DirA
         \bin
             \Debug
                  (some files under debug)
             \Release
    \DirB
         \bin
             \Debug
    \DirC
         \bin
             \Release

Trong Unix, tôi ls */bin/Debugsẽ chỉ cho tôi một danh sách tất cả những thứ trong đó DirA/bin/Debug, và cho tôi thấy thực tế DirB/bin/Debuglà trống rỗng. Tôi đã thử các cách khác nhau trong vỏ cmd, nhưng tiếp tục cuộn lên với những thứ như:

    > thư mục * \ bin \ Gỡ lỗi
    Tên tệp, tên thư mục hoặc cú pháp nhãn âm lượng không chính xác.

    > thư mục * \ * \ *
    Tên tệp, tên thư mục hoặc cú pháp nhãn âm lượng không chính xác.

Có điều gì đó tinh tế tôi không hiểu về lệnh dir, hoặc nó chỉ bị giới hạn theo cách đó?

Vâng, tôi nhận ra rằng tôi chỉ có thể chuyển sang thám hiểm, điều hướng, nhấp chuột phải và cuối cùng có thể tạo ra một tìm kiếm thực hiện những gì tôi muốn, nhưng tôi quan tâm hơn đến giải pháp dòng lệnh nhanh-bẩn.


Mặc dù thật tuyệt khi biết về tất cả các công cụ giống như unix mà tôi có thể thêm vào Windows (và tin tôi là tôi sử dụng Cygwin ở nhà!), Tôi sẽ không luôn có sẵn chúng ở bất cứ nơi nào tôi đi (và thực sự có thể không có quyền Quản trị viên để cài đặt chúng trên mọi PC tôi sử dụng).
Ogre Psalm33

Câu trả lời:


13

Một cái gì đó như thế này nên làm những gì bạn muốn. Tại thư mục gốc của loại dự án:


c:\path\to\slndir>dir *.dll *.exe /s /b | findstr /i "bin\debug"

Đối số trực tiếp: / s - đệ quy, / b - "trần", không có thêm
đối số findstr đối số: / i - bỏ qua trường hợp

Nói chung, ' lệnh trợ giúp ' sẽ hiển thị trợ giúp cho các lệnh shell. Nếu nó không hoạt động, thì
' lệnh /?' nói chung sẽ giúp đỡ.


Thông minh! Tôi nhận ra có rất nhiều công cụ / bộ công cụ hiện có để giúp tôi "linux hóa" Windows của mình, nhưng tôi đang tìm cách Windows để làm những gì tôi đang cố gắng làm, và đây chính xác là nó!
Ogre Psalm33

7

Windows không làm các ký tự đại diện như cách Linux làm. Chỉ phần tên tệp có thể chứa ký tự đại diện.

Bạn có thể tải xuống phiên bản ls chạy trên Windows và sử dụng phiên bản đó. Tôi đã sử dụng Cygwin , nhưng tôi chắc chắn có những người khác.


Ngoài ra PowerShell
Joel Coehoorn

3
Một điều khác cần ghi nhớ: trong các ký tự đại diện của Windows được mở rộng bằng lệnh chứ không phải bằng trình bao.
Laurence Gonsalves

2

unxutils có lệnh ls. Vấn đề là thực sự với vỏ windows, tuy nhiên. Khi unix, shell của bạn sẽ mở rộng */bin/Debugthành các tên đường dẫn có liên quan và đưa chúng vào lệnh ls dưới dạng các đối số dòng lệnh riêng biệt.

Cygwin chắc chắn sẽ thực hiện thủ thuật cho bạn hoặc bạn có thể thử cổng windows của một vỏ unix như bash . Nếu bạn muốn đi theo con đường kịch bản, bạn có thể mã hóa thứ gì đó bằng python khá dễ dàng bằng mô-đun toàn cầu và hầu hết các ngôn ngữ kịch bản lệnh khác đều có tương đương.


2

Bạn có thể làm một cái gì đó như "dir / s * .obj * lib". Nó sẽ đưa ra một bản tóm tắt ở cuối số lượng tệp phù hợp.


Đóng. Tôi đã đưa cho bạn đạo cụ, nhưng câu trả lời của James gần hơn, vì nó lọc ra các tệp không thuộc \ gỡ lỗi cho tôi.
Ogre Psalm33

2
@for /D /r %P in (.) do @for %Q in ("%~fP\bin\Debug\*") do @echo %~ftzaQ

Không đẹp, nhưng nên làm việc. Bạn cũng có thể đặt vào tệp .cmd (sau đó thay thế mỗi% đơn lẻ thành gấp đôi %%). Hoặc xác định một macro sử dụng doskey (vâng, nó vẫn tồn tại).

Đảm bảo rằng tiện ích mở rộng cmd được bật.

EDIT: Cách thức hoạt động:

Vòng lặp đầu tiên cho vòng lặp lặp qua tất cả các thư mục con (công tắc / D và / r) lặp đi lặp lại. % ~ fP mở rộng đến đường dẫn đầy đủ của thư mục đó. Sau đó, nó sẽ thêm \ bin \ Debug * vào đường dẫn đó. Vòng lặp thứ hai liệt kê tất cả các tệp khớp. % ~ ftzaQ được mở rộng cho mọi tệp trùng khớp và được in ra màn hình bằng tiếng vang. Định dạng% ~ ftzaQ lạ giống như đầu ra dir. Ký tự @ tránh các lệnh được in trên màn hình.

Để biết thêm, xem


Tôi đã thử điều này và thực sự nó làm việc. Nhưng vì hơi thiếu kinh nghiệm trong vỏ cmd, tôi chưa hiểu hết về nó :-).
Ogre Psalm33

0

Trong thế giới Windows, cmd.exe không mở rộng các ký tự đại diện - chúng được truyền như nguyên trạng cho chương trình trong dòng lệnh hoặc mảng argv của nó. Do đó, mỗi chương trình phân tích và mở rộng chúng khác nhau và một số sử dụng nâng cao hơn (như bạn đang tìm kiếm) thường không được hỗ trợ.

Đề xuất sử dụng Cygwin của timgilbert là một cách tốt, ngoài ra gói GNUWin32 có thể có thứ gì đó sẽ giúp bạn giải quyết.

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.