sử dụng FORFILES theo đợt để xóa các tệp tmp và bak cũ hơn một tuần


3

Tôi gặp vấn đề làm cho cú pháp này hoạt động chính xác. Những gì tôi muốn làm là xóa tất cả các tệp tmp và bak khỏi thư mục được chỉ định và tất cả các thư mục con nếu ngày sửa đổi cũ hơn 7 ngày.

for %G in (.tmp, .bak) do forfiles -p "C:\test\cad projects" -s -m *%G -d -7 -c "cmd /c del @path"

Cú pháp của tôi được thu thập từ câu hỏi StackOverflow này .

Nếu tôi thay đổi mặt nạ tìm kiếm của mình để chỉ bao gồm một tiện ích mở rộng mong muốn thì tôi nhận được kết quả chính xác.

forfiles -p "c:\test\cad projects" -s -m *.bak -d -7 -c "cmd /c del @path"

Tôi không làm gì nhiều với các tệp bó nên tôi hy vọng ai đó có thể hỗ trợ. Cảm ơn vì đã đọc.

Câu trả lời:


5

Nếu bạn đang chạy cái này từ bàn điều khiển, nó sẽ hoạt động. Nếu bạn đang lưu tệp này vào tệp .bat , thì định dạng cho các biến sẽ hơi khác một chút. Bạn phải sử dụng hai dấu phần trăm để biểu thị một biến. Vì vậy, lệnh của bạn sau đó sẽ trở thành ...

for %%G in (.tmp, .bak) do forfiles -p "C:\test\cad projects" -s -m *%%G -d -7 -c "cmd /c del @path"

Bài viết KB75634 của Microsoft giải thích lý do tại sao điều này là.

Nếu không có ký tự giữa hai dấu phần trăm, một dấu phần trăm sẽ bị loại bỏ và dấu kia sẽ vẫn còn. Đây là lý do tại sao một lệnh FOR lặp lại tên của mỗi tệp có phần mở rộng .COM sẽ là

FOR %V IN (*.COM) DO ECHO %V

nhưng nếu cùng một lệnh được đặt trong một tệp bó, thì những điều sau đây là bắt buộc:

FOR %%V IN (*.COM) DO ECHO %%V

@TWood, tôi đã thêm một đoạn trích từ Microsoft.com về lý do tại sao bạn phải làm điều đó.
vẽ Chapin

0

Vâng, tôi đã không đọc đủ cẩn thận về cú pháp FOR / R. Tôi đã bị thiếu một%. Mã của tôi ở trên sẽ làm việc tại dòng lệnh. Từ một đợt, nó đã thất bại vì thiếu%.

for %%G in (.tmp, .bak) do forfiles -p "C:\test\cad projects" -s -m
*%%G -d -7 -c "cmd /c del @path"
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.