批处理正在将有关已停止服务的信息写入带有时间戳的日志文件中。
我注意到执行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.
强制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
loop捕获net stop
的输出并在!date!-!time!
之前到达每一行。确保为此启用delayed expansion(否则您将获得每行的相同日期和时间):
>> "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
字符的默认值。