net stop "service" не разбивает строки журнала - PullRequest
1 голос
/ 05 апреля 2019

Пакет записывает информацию об остановленных сервисах в файл журнала с отметками времени.

Я заметил, что некоторые шаги выполнения команды net stop "service" разделяют результат на разные строки.

echo|set /p=%date%-%time% >> Stop.log & net stop "Service1" >> Stop.log

Фактический Stop.log результат:

05/04/2019- 9:32:28.87  Service1 is stopping.
Service1 service was stopped successfully.

Ожидаемый Stop.log результат:

05/04/2019- 9:32:28.87  Service1 is stopping.
05/04/2019- 9:34:21.23  Service1 service was stopped successfully.

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

заставить net stop вернуть одну строку (точнее: объединить все выходные строки в одну):

@echo off
(<nul set /p"=%date%-%time% "
  for /f "tokens=*" %%a in ('net stop "Service1"') do <nul set /p "=%%a "
  echo/
)>> Stop.log

(Примечание для тех, кто хочет попробовать без остановки служб: вместо net stop "Service1"попробуйте dir /b)

К сохранить вывод в виде нескольких строк, но перед датой и временем добавьте каждую строку:

 @echo off
 for /f "tokens=*" %%a in ('net stop "Service1"') do echo %date%-%time% %%a >> Stop.log
0 голосов
/ 05 апреля 2019

Используйте for /F петлю , чтобы зафиксировать вывод net stop и предшествовать !date!-!time! каждой строке.Убедитесь, что для этого включено отложенное расширение (в противном случае вы получите одинаковую дату и время для каждой строки):

>> "Stop.log" (
    for /F "delims=" %%L in ('net stop "Service1"') do (
        set "LINE=%%L"
        setlocal EnableDelayedExpansion
        echo/!DATE!-!TIME! !LINE!
        endlocal
    )
)

Обратите внимание, что пустые строки, возвращаемые net stop, теряются из-задо for /F.Так же строки начинаются с точки с запятой, так как это значение по умолчанию для eol символа for /F.

...