Batch-File

帶有多行描述的事件創建

  • May 14, 2020

我想使用批處理文件中的 eventcreate 來記錄文件複製作業(robocopy)的結果。我真正想做的是使用文件複製作業的輸出作為事件的描述(/D of createevent)。問題是,文件複製輸出中有多行,而我只能將一行放入局部變數或管道命令。

我試過從文件中讀取一個局部變數,比如

set /P myVar=<temp.txt

但它只得到第一行。

如何將多行寫入批處理文件中的事件描述?

您必須解析日誌並將 CRLF 更改為 LF (ctrl-l)。

這是一個例子:

EVENTCREATE /T ERROR /ID 1000 /l application /d "This is text^L this is line 2"

您可以自己構造一個多行變數,稱為!LF!. 這篇文章詳細解釋了換行符/CMD解析器的工作原理。

@echo off
SETLOCAL EnableDelayedExpansion

(set LF=^
%=--------DO NOT remove this line. Expands to nothing--------=%
)
set "lines=" reset LINES to 0
set "in=temp.txt"


call :readlines "%in%" lines

<"%in%" (FOR /L %%# in (1 1 %lines%) do (
   set "data="                                ::clear DATA
   set/p"data="                               ::read from IN
   set "fileContent=!fileContent!!data!!LF!"  ::manually construct multi-line variable
)) %= read file by lines via SET /P =%

EVENTCREATE /T ERROR /ID 1000 /l application /d "!fileContent!"
exit /b


:readlines FILE VAR
FOR /F %%L in ('
"findstr /N "^^" "%~1" %= do not skip empty lines =%"
') do set/a"%~2+=1" %= Get the # of lines =%

截屏:

引用自:https://serverfault.com/questions/137493