Phương thức đổi tên không hoạt động đối với tôi (được thử nghiệm trên Windows XP SP3). Tôi bắt đầu một ứng dụng tùy ý và cố gắng đổi tên nó thành chính nó. Không có lỗi, không ảnh hưởng gì.
Tuy nhiên, phương pháp này đã làm việc:
COPY /B app.exe+NUL app.exe
Khi ứng dụng đang chạy, lệnh này được sản xuất cho tôi một thông báo lỗi. Và khi các ứng dụng đã được unengaged, không chỉ lệnh này bảo quản các nội dung của tập tin, nhưng nó cũng trái dấu thời gian sửa đổi không thay đổi.
Nếu tôi là bạn, do đó, tôi sẽ có thể sử dụng lệnh này (ở phần đầu của kịch bản hàng loạt, như bạn nói) theo cách này:
COPY /B app.exe+NUL app.exe >NUL || (GOTO :EOF)
Nhà điều hành ||
đi sự kiểm soát để lệnh/khối bên cạnh nó nếu lệnh trước đó đã thất bại (tăng giá trị errorlevel). Do đó, lệnh trên sẽ chấm dứt tập lệnh nếu COPY không thành công (nếu tệp đó được mở).
Thông báo lỗi sẽ được giữ nguyên (vì các thông báo như vậy thường được gửi đến thiết bị lỗi chuẩn và không bị loại bỏ với chuyển hướng >NUL
, trong khi các thông báo không phải lỗi khác thường được gửi đến đầu ra tiêu chuẩn. bị chặn với >NUL
) và đóng vai trò như một lời giải thích về sự chấm dứt sớm của tập lệnh. Tuy nhiên, nếu bạn muốn hiển thị thông điệp của riêng bạn thay vào đó, bạn có thể thử một cái gì đó như thế này:
COPY /B app.exe+NUL app.exe >NUL 2>NUL || (ECHO Target file inaccessible& GOTO :EOF)
Trong khi >NUL
da bất cứ điều gì được gửi đến đầu ra tiêu chuẩn, 2>NUL
cũng làm như vậy cho sai số chuẩn.
Nguồn
2011-08-07 01:25:32
Cảm ơn @Andriy. Vâng, nó hoạt động. Nó có thể mất một chút thời gian mặc dù, nếu các tập tin thực thi có liên quan là lớn, mà tôi đang có. Cách khác tôi nghĩ đến là viết một tiện ích 2 dòng delphi cố gắng đổi tên một tệp thành một tên ngẫu nhiên và đổi tên lại thành công nếu nó thành công và trả về một mã thoát không nếu nó không thể. – rossmcm