Я пытаюсь запустить этот сценарий от имени администратора. Когда я запускаю его без прав администратора, файл журнала сохраняется в C: \ Windows \ System32. Я помещаю в скрипт echo% ~ dp0, и он переходит в текущий каталог.
%~dp0
SC QUERY | FINDSTR "Fax"
IF ERRORLEVEL 0 SC CONFIG Fax START= DISABLED >> log.txt
Если я жестко настрою файл журнала следующим образом:
%~dp0
SC QUERY | FINDSTR "Fax"
IF ERRORLEVEL 0 SC CONFIG Fax START= DISABLED >> C:\logs\log.txt
Я могу получить журнал в этом месте. Но мне нужно запустить его только на машинах с проблемами, и я хотел бы, чтобы файл был на USB.
Попробуйте следующий фрагмент кода:
@ECHO OFF
SETLOCAL EnableExtensions
SC QUERY state= all | FINDSTR "Fax"
REM alternatively: SC QUERY Fax | FINDSTR "Fax"
IF ERRORLEVEL 2 (
REM Findstr: Wrong syntax
) else (
IF ERRORLEVEL 1 (
REM "Fax": A match not found
) else (
REM "Fax": A match is found in at least one line of the query
>> "%~dp0log.txt" SC CONFIG Fax START= DISABLED
)
)
Объяснение:
SC QUERY
без какой-либо опции перечисляет только запущенный (по умолчанию состояние = активно
), см. SC /?
; IF ERRORLEVEL номер
в порядке убывания как Номер ERRORLEVEL
указывает истинное состояние, если последний запуск программы вернул код выхода , равный или больше , чем указанное число (то есть IF ERRORLEVEL 0
равно всегда действителен ), см. IF /?
; % ~ dp0
заменяет % 0
буквой диска и путем (включая обратную косую черту в конце), см. звоните /?
. Обратите внимание, что % ~ dp0
вернет диск и путь к пакетному сценарию, см. Ссылки относительно пакетного сценария ) >> "% ~ dp0log.txt" SC…
- см. перенаправление .