Câu hỏi Nhận tên tập tin trần đệ quy trong dấu nhắc lệnh


Tôi chạy vào một chút snag cố gắng để có được chỉ tên tập tin (không có phần mở rộng hoặc đường dẫn tập tin) đệ quy. Điều này làm việc cho tôi trong thư mục gốc:

dir /b

Nhưng khi tôi thêm / s để quét đệ quy tôi cũng có đường dẫn tập tin trước tên tập tin mà tôi không muốn. Có cách nào để có được tên tập tin trần từ tất cả các thư mục con trong một thư mục?

Im trên Windows 7 x64 Tôi muốn sử dụng lệnh thường xuyên không phải PS hoặc VBS


15
2018-06-07 15:59


gốc




Các câu trả lời:


Sử dụng lệnh sau:

dir /b /a /s
  • / b dải ngày và các chi tiết khác từ đầu ra
  • / a chỉ xuất ra tên tệp, không có đường dẫn
  • /S cho phép danh sách thư mục đệ quy

Nếu bạn cần lưu đầu ra vào một tệp, bạn có thể sử dụng:

dir /b /a /s >> list_of_names.txt

CHỈNH SỬA Trên thực tế, giải pháp trên không đạt được mục tiêu của câu hỏi ban đầu. Một điều tôi đã nhận thấy từ câu hỏi là bài viết yêu cầu danh sách đệ quy. mà câu trả lời khác thiếu vì vậy tôi nghĩ rằng thêm "/ s" trong câu trả lời của người trả lời khác sẽ làm các trick

for /f %a in ('dir /b /s') do @echo %~na

13
2017-11-08 21:58



Bạn có thể giải thích điều này? Đối với tôi nó có ý nghĩa rất ít. - Simon Sheehan
Điều này không hoạt động, / a không hoạt động như thế - đó là bộ lọc cho loại tệp bạn muốn liệt kê. Nó không tách đường dẫn khỏi tên tệp khi thực hiện danh sách thư mục đệ quy. - 3498DB
chỉnh sửa câu trả lời; và chỉ cần đặt tay vào một hộp cửa sổ một lần nữa, tôi nghĩ rằng thời gian này nên làm điều đó (win732bit) - Nik So


Thử cái này:

for /f "delims=" %a in ('dir /b /s') do @echo %~na

Thông tin thêm về cách hoạt động và công việc của nó, hãy nhập for /?


5
2018-06-07 16:18



Điều này gần như hoạt động nhưng có một vấn đề lớn. Nó chỉ xuất ra từ đầu tiên của tên tệp. Nếu tên tệp là ví dụ "hình ảnh kỳ nghỉ 1 của tôi" thì nó chỉ xuất ra "của tôi" - TMRW
hãy thử điều này: for / f "delims = |" % a in ('dir / b') làm @echo% ~ na. Theo mặc định tham số / f của FOR sẽ tokenize trên không gian. Đặt mã thông báo cho một ký tự không xuất hiện trong tên tệp / thư mục sẽ cung cấp cho bạn toàn bộ tên bao gồm cả dấu cách. - Scott McKinney


for /r %i in (*) do @echo %~ni

hoặc là

forfiles /s /c "cmd /c if @isdir==FALSE noquotes.bat @fname"

giả định một tập tin noquotes.bat trong của bạn %CON ĐƯỜNG% với nội dung này

@echo %~1

cho / r cách giải thích

for /r truy xuất thư mục hiện tại đệ quy (bạn có thể chỉ định một thư mục for /r drive:\path\, thư mục hiện tại được giả định) và thực thi lệnh được chỉ định bởi làm cho mỗi tệp được khớp trong tập hợp (*). Bộ (.) sẽ chỉ khớp với các thư mục. @echo% ~ ni Lệnh này hoạt động như-là từ dấu nhắc. Tăng gấp đôi lên trên báo giá của bạn nếu bạn đặt nó bên trong một tập tin thực thi. I E. for /r %%i in (*) do @echo %%~ni

phương pháp tiếp cận forfiles được giải thích

/s liệt kê các thư mục con hiện tại và tất cả các thư mục con
/c thực hiện lệnh bên trong dấu ngoặc kép
@isdir và @fname là một biểu tượng được phát ra trong chuỗi lệnh
Tệp lô bổ sung noquotes.bat giúp bằng cách loại bỏ dấu ngoặc kép bằng% ~ 1 (tham số 1)
forfiles cũng cho phép bạn chỉ định đường dẫn để bắt đầu tại forfiles /P C:\Windows ...


2
2017-07-26 19:50



@ DavidPostill có, đó là một câu trả lời nghèo nàn. Cảm ơn ý kiến ​​của bạn. Vui lòng cho tôi biết nếu tôi có thể cải thiện thêm câu trả lời của mình. - JJS
@DavidPostill bạn không có câu trả lời hoặc nhận xét trước nào. bạn đang kiểm duyệt các câu hỏi, hoặc tìm kiếm câu trả lời và vấp ngã câu trả lời chất lượng kém của tôi? - JJS
Câu trả lời của bạn xuất hiện trong hàng đợi đánh giá "Bài đăng chất lượng thấp". Như tôi biết rất nhiều về các tập tin batch tôi đã đóng một lúc nó. - DavidPostill♦
@DavidPostill cảm ơn bạn đã đánh giá. Tôi hoan nghênh đánh giá của bạn về những thay đổi tôi đã thực hiện cho câu trả lời của mình. - JJS
Tốt hơn nhiều ... :) - DavidPostill♦