Я хотел бы использовать eventcreate из пакетного файла для регистрации результатов задания копирования файла (robocopy). Что мне действительно хотелось бы сделать, так это использовать вывод задания копирования файла в качестве описания события (/ D в 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 =%
Скриншот: