Пакет записывает информацию об остановленных службах в файл журнала с отметками времени.
Я заметил, что некоторые этапы выполнения команды чистая остановка"оказание услуг" разбивают результат на разные строки.
echo|set /p=%date%-%time% >> Stop.log & net stop "Service1" >> Stop.log
Фактический результат Стоп.журнал:
05/04/2019- 9:32:28.87 Service1 is stopping.
Service1 service was stopped successfully.
Ожидаемый результат Стоп.журнал:
05/04/2019- 9:32:28.87 Service1 is stopping.
05/04/2019- 9:34:21.23 Service1 service was stopped successfully.





заставить 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
Используйте 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.
Вы предоставляете
%DATE%и%TIME%только один раз;Net Stopвыводит2строк. Как вы собираетесь вводить дату и время на полпути через вывод другой команды? Вы не пытались это сделать, поэтому я не понимаю, как вы можете ожидать, чтоStop.logвыведет это таким образом.