net stop“service”不分割日志行

问题描述 投票:1回答:2

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

我注意到执行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.
batch-file logging service cmd
2个回答
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

0
投票

使用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 stopfor /F返回的空行将丢失。因此,这是以分号开头的行,因为这是eolfor /F字符的默认值。

© www.soinside.com 2019 - 2024. All rights reserved.