Autorun .bat-file để kiểm tra xem máy tính đã được rút phích cắm chưa. Nếu vậy, giết quá trình


1

Khi khởi động, tôi muốn có một đoạn script để kiểm tra xem máy tính có được rút phích cắm không (tức là chạy bằng pin). Nếu vậy, tôi muốn giết một vài quy trình.

Sau khi quét siêu người dùng và stackoverflow, tôi đã đi xa đến mức này:

@ECHO OFF
FOR /F "skip=1 tokens=1" %%A in ('WMIC Path Win32_Battery Get   BatteryStatus') DO SET BatteryStatus=%%A
IF "%BatteryStatus%"=="1" (
taskkill /im DMT.exe
taskkill /im AudioSwitcher.exe
)

Với ECHO ON tôi nhận được:

>SET BatteryStatus=2
>SET BatteryStatus=
>IF "" == "1"

Tại sao nó không lưu số 2?

Câu trả lời:


0

Tại sao nó không lưu số 2?

Nếu bạn chạy lệnh sau trong cmdshell:

WMIC Path Win32_Battery Get BatteryStatus

Đầu ra thường là:

F:\test>WMIC Path Win32_Battery Get BatteryStatus
BatteryStatus
2


F:\test>

Như trên cho thấy, wmicđầu ra một dòng trống bổ sung.

Đối với một dòng trống %%Asẽ là một chuỗi trống và BatteryStatussẽ không được xác định.

Việc sửa chữa đơn giản nhất là ống |đầu ra của wmicđể findstr /r /v "^$"mà sẽ tước bất kỳ dòng trống.

Tệp bó đã sửa (test.cmd):

@ECHO OFF
FOR /F "skip=1 tokens=1" %%A in ('WMIC Path Win32_Battery Get BatteryStatus ^| findstr /r /v "^$"') DO SET BatteryStatus=%%A
IF "%BatteryStatus%"=="1" (
taskkill /im DMT.exe
taskkill /im AudioSwitcher.exe
)

Đầu ra có echobật:

F:\test>test

F:\test>rem @ECHO OFF

F:\test>FOR /F "skip=1 tokens=1" %A in ('WMIC Path Win32_Battery Get BatteryStatus | findstr /r /v "^$"') DO SET BatteryStatus=%A

F:\test>SET BatteryStatus=2

F:\test>IF "2" == "1" (
taskkill /im DMT.exe
 taskkill /im AudioSwitcher.exe
)

Đọc thêm

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.