2012-05-28 27 views
6

Tôi muốn xóa tất cả các tệp trong thư mục hiện tại không chứa chuỗi "mẫu" trong tên của chúng.DOS Lô cho vòng lặp để xóa tệp không chứa chuỗi

ví dụ,

test_final_1.exe 
test_initial_1.exe 
test_sample_1.exe 
test_sample_2.exe 

Tôi muốn xóa tất cả các file khác hơn so với những người có chứa mẫu trong tên của họ.

for %i in (*.*) do if not %i == "*sample*" del /f /q %i 

Is the use of wild card character in the if condition allowed? 
Does, (*.*) represent the current directory? 

Cảm ơn.

Trả lời

6

Dễ nhất để sử dụng FIND hoặc FINDSTR với /V tùy chọn tìm kiếm tên không chứa chuỗi và tùy chọn /I để tìm kiếm trường hợp không phù hợp. Chuyển sang FOR /F và kết quả đường ống của DIR đến FIND.

for /f "eol=: delims=" %F in ('dir /b /a-d * ^| find /v /i "sample"') do del "%F" 

thay đổi% F thành %% F nếu được sử dụng trong tệp lô.

+0

Cảm ơn. Điều đó hoạt động. Nó thậm chí hoạt động mà không cần thêm, "eol =: delims =". Tôi có thể biết lý do sử dụng nó trong dòng lệnh trên không? Ngoài ra, các đối số bổ sung cho lệnh dir khác với/b. Tôi hiểu việc sử dụng chuyển đổi/b tuy nhiên, việc sử dụng/a-d là gì? –

+0

Sử dụng 'HELP DIR' từ dòng lệnh để được trợ giúp về tất cả các tùy chọn. Nhưng '/ a-d' loại trừ các thư mục khỏi đầu ra. 'DELIMS' nên được đặt thành không có gì để bảo toàn toàn bộ tên tệp. Mặc định của không gian và tab sẽ phá vỡ ở không gian đầu tiên trong một tên tập tin. Ký tự ';' là một tên tệp hợp lệ. Bất kỳ tên tệp nào bắt đầu bằng ';' sẽ bị bỏ qua bởi 'FOR' với tùy chọn' EOL' mặc định. Không có tên tệp nào có thể chứa một ':', vì vậy tôi đặt tùy chọn 'EOL' cho ký tự đó. – dbenham

2
setlocal EnableDelayedExpansion 
for %i in (*.*) do (set "name=%i" & if "!name!" == "!name:sample=!" del /f /q %i) 
2

Câu trả lời từ Aacini đã làm việc cho tôi. Tôi cần một tệp dơi để phân tích cú pháp cây thư mục tìm tất cả các tệp có phần mở rộng tệp xyz và không chứa badvalue ở bất kỳ đâu trong đường dẫn. Giải pháp là:

setlocal enableDelayedExpansion 

for /r %%f in (*.xyz) do (
    set "str1=%%f" 
    if "!str1!" == "!str1:badvalue=!" (
     echo Found file with xyz extension and without badvalue in path 
    ) 
) 
+0

Điều này không thực sự khác với câu trả lời của Aacini. Nó thêm gì? – Ben

Các vấn đề liên quan