2013-08-05 21 views
5

Tôi có một kịch bản shell Unix mà sẽ giết bất kỳ quá trình đó được truy cập vào một thư mục:của Windows batch tương đương với "fuser -k <folder>"

fuser -k ..\logs\* 

Có một tập lệnh batch của Windows tương đương với điều này? Tôi biết TASKKILL nhưng tôi không chắc chắn nếu nó sẽ làm những gì tôi cần. Có ai biết nếu điều này là có thể với Windows shell?

Trả lời

5

Không có công cụ tích hợp (không có gì có thể liệt kê xử lý), nhưng bạn có thể sử dụng Sysinternals Handle tool để có danh sách các PID có tay cầm mở trên tệp. Sau đó, bạn có thể phân tích đầu ra bằng FOR /F và sử dụng TASKKILL để kết thúc quá trình.

Ví dụ:

for /f "skip=4 tokens=3" %i in ('handle ..\logs\') do taskkill /pid %i 

skip=4 bỏ qua các thông tin bản quyền về sản lượng Xử lý và tokens=3 chọn ra PID từ mỗi dòng đầu ra. Phần còn lại là tự giải thích.

+0

Cảm ơn nhận xét. Nó cần phải được thực hiện hoàn toàn trong Windows shell mà không có các công cụ khác vì tôi cần triển khai nó cho nhiều máy mà tôi không thể cài đặt. Tôi không nghĩ rằng nó có thể với vỏ chỉ đơn giản, vì vậy tôi sẽ phải thuyết phục nhóm của tôi để cài đặt một cái gì đó như thế này trên máy. – Matt

+1

@Matt: Lưu ý rằng Handle (và bất kỳ công cụ nào khác có thể thực hiện việc này) phải chạy với quyền quản trị. – Jon

0

Tôi đã tìm thấy fuser cho Windows. Kiểm tra this link tới Sourceforge

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