净停止“服务”不拆分日志行

时间:2019-04-05 08:49:03

标签: batch-file logging service cmd

一批正在将有关已停止服务的信息写入带有时间戳的日志文件中。

我注意到执行净停止 “服务” 命令的一些步骤将结果分成不同的行。

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 个答案:

答案 0 :(得分:1)

强制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

答案 1 :(得分:0)

使用for /F loop捕获firestore的输出,并将net stop放在每一行之前。确保为此启用了delayed expansion(否则您将获得每行相同的日期和时间):

!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的{​​{1}}字符的默认行。