cmd.exe: Tiếng vang del * .txten cũng xóa * .txt1 vv [trùng lặp]


8

Có thể trùng lặp:
Lệnh dir WinXP: 3 và 4 phần mở rộng char có giống nhau không?

Tôi đã bị làm phiền bởi một hành vi kỳ lạ của cmd.exe trong một thời gian dài (ít nhất là WinXP và Windows7). Một lệnh like del *.txtcũng sẽ xóa *.txt1các tệp (bất kỳ số lượng ký tự nào sau '.txt' sẽ làm). Đây có phải là một lỗi nổi tiếng hay những gì?

Câu trả lời:


8

Đó là một đôi khi gặp phải một số được biết đến?

Một lời giải thích về hành vi là ở đây , hoàn thành với một cách giải quyết có thể.

Tóm tắt: Xuất phát từ cách NTFS xử lý tên tệp ngắn (8.3), để tương thích với các nội dung cũ không thể xử lý tên tệp dài "mới răng cưa". dir /xcó thể được sử dụng để xem tên tệp ngắn, như vậy:

C:\>dir /x *~*
 ...
02/25/2011  08:18 AM    <DIR>          DOCUME~1     Documents and Settings
05/28/2011  12:02 AM    <DIR>          PROGRA~1     Program Files
 ...

Phần mở rộng dài hơn ba ký tự đơn giản sẽ bị cắt ngắn cho tên tệp ngắn của chúng; vì thế .txt1, .txtxtxtxt, .txt_file, vv, tất cả trở thành .txt.


6

Các tệp có hơn 4 chữ cái trong phần mở rộng (và tất nhiên các quy tắc khác cũng được áp dụng), lấy một tên ngắn, vì vậy, ví dụ "foo.txt1" có tên viết tắt là "foo ~ 1.txt". DEL(giống DIRvà có thể là hầu hết các cmd.exelệnh dựng sẵn khác ) cũng sẽ hoạt động trên các tên ngắn. Đối với một cuộc thảo luận về một chủ đề liên quan xem tại đây: http://bloss.msdn.com/b/oldnewthing/archive/2005/07/20/440918.aspx


+1 cho một liên kết có thẩm quyền hơn của tôi.
Jim Davis

2

Điều này sẽ có trên một hệ thống tập tin FAT / VFAT? Nếu vậy, bạn sẽ bị cắn bởi tin tặc được sử dụng để đại diện cho các tên không phù hợp với lược đồ 8.3; có một DIRtùy chọn hiển thị cho bạn các tên ngắn được đọc sai, sẽ bắt đầu bằng tên tệp thực tế nhưng có một ~và một số trước phần mở rộng, sau đó phần mở rộng được giới hạn ở 3 ký tự. (Ví dụ: C:\Program Filesthường được dịch thành C:\PROGRA~1.) Một ký tự đại diện có thể bất ngờ khớp với các tên này. Điều này không nên xảy ra trên NTFS hoặc (tôi nghĩ) trên các chia sẻ mạng. ngoại trừ việc DOS vẫn chưa chết, có vẻ như ....


2

Bạn có thể sử dụng Forfileslệnh cho một cách giải quyết

Ví dụ.

Forfiles  -s -m *.txt -c "cmd /C del /q @path"

Trận đấu chỉ txtkết thúc.

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.