Как создать отдельные текстовые файлы из вывода wmic

Я хочу создать отдельные текстовые файлы из каждой записи в выводе wmic.

пока у меня есть

WMIC.ехе /узел:localhost в /пространство имен:корень\SecurityCenter2 путь AntiVirusProduct вам формат "отображаемое имя"/: КШМ>AVlist.txt


WMIC.EXE-файл /узел:localhost в /пространство имен:корень\SecurityCenter2 путь AntiSpywareProduct вам формат "отображаемое имя"/: КШМ>>AVlist.txt

, которые дают мне список со следующим

узел, displayName


MAINCOMPUTER, антивирус Number1


MAINCOMPUTER, антивирус Number2


Узла,отображаемое имя


MAINCOMPUTER, антивирус Number2


MAINCOMPUTER, Number1 антишпион

то, что я хочу сделать, это создать несколько текстовых файлов, которые будут помечены

Антивирус Number1.txt


Антивирус Number2.txt


Номер1 Антишпион.формат txt

без дубликатов, без перезаписи существующих файлов и без сохранения заголовков "Node,displayName", создаваемых при каждом запуске wmic...

теперь я боролся с этим в течение нескольких дней и придумали огромный беспорядок файла, который в значительной степени зависит от создания временных файлов и их удаления после... не элегантно, слишком сложно, я просто ненавижу это. Итак, мне интересно, есть ли у волшебников здесь более простой решение?

вот этот беспорядок я сделал до сих пор. Не смотрите слишком внимательно на дрянной код.

WMIC.ехе /узел:localhost в /пространство имен:корень\SecurityCenter2 путь AntiVirusProduct вам формат "отображаемое имя"/: КШМ>AVlist.txt


WMIC.EXE-файл /узел:localhost в /пространство имен:корень\SecurityCenter2 путь AntiSpywareProduct вам формат "отображаемое имя"/: КШМ>>AVlist.txt


:: удалить пробелы


for /f "skip=1 delims=" %%a in (AVlist.формат txt) do (


установить str=%%a


установите ул. стр=%:'=%


установите ул. стр=%:,=%


Эхо %стр% >>%Temp%сfiletmp.txt


)


команда xcopy команду %Temp%filetmp.txt %~dp0AVlist.txt / y


del %temp%filetmp.txt /f / q

::: удалить повторяющиеся строки


setlocal enabledelayedexpansion


set inputfile=AVlist.txt


set outputfile=AVlist2.txt

Эхо-файл для обработки


эхо.


введите %inputfile%


эхо.

Если есть сортировка.тхт-дель-отсортированный.txt


сортировать %inputfile% / O %temp%сортировка.txt

Если существует %outputfile% del %outputfile%


набор строчка=


for / f "delims==" %%L in (сортировка.txt) do (


задайте эту прямую=%%л


если нет"!эта линия!"=="!последняя строка!" эхо !эта линия!>>%выходной_файл%


набор строчка=%%л


)

del сортировка.txt

Эхо удалены:


эхо.


setlocal disabledelayedexpansion

:: удалить заголовок


ren AVlist2.txt AVlist2.формат txt.старый


команда findstr /V /б /с:"узел", "отображаемое имя" AVlist2.формат txt.старый > AVlist2.txt


тип avlist2.txt


пауза

Yikes!

15
задан Flaver-D
05.12.2022 2:28 Количество просмотров материала 3236
Распечатать страницу

2 ответа

если я правильно понимаю, что вы пытаетесь достичь, эта партия будет делать:

@Echo off
For /f "skip=1 tokens=1,2 delims=," %%A in (
  'WMIC.exe /Namespace:\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:csv^|find "," '
) Do For /f "delims=" %%C in ("%%B") Do Find /I "%%A,%%C" "%%C.txt" >NUL 2>&1 ||(>> "%%C.txt" Echo:%%A,%%C)

For /f "skip=1 tokens=1,2 delims=," %%A in (
  'WMIC.exe /Namespace:\root\SecurityCenter2 Path AntiSpywareProduct Get displayName /Format:csv^|find ","'
) Do For /f "delims=" %%C in ("%%B") Do Find /I "%%A,%%C" "%%C.txt" >NUL 2>&1 ||(>> "%%C.txt" Echo:%%A,%%C)

  • нет необходимости во временных файлах и сортировке,
  • непосредственно разбор wmic вывод с for /f и
  • skip=1 чтобы избавиться от заголовка,
  • tokens=1,2 delims=," разделить линии и хранить node to %%A и displayname to %%B
  • find чтобы проверить, если запись уже существует в месте назначения папка.

EDIT3 исправлена партия, должна работать.

2
отвечен LotPings 2022-12-06 10:16

вот что я в итоге сделал

Не так хорошо, как ответ, но он все еще работает.

For /f "skip=2 tokens=1,2 delims=," %%A in (     
  'WMIC.exe /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:csv '
) Do (    
set str=%%a     
set str=%str:'=%    
set str=%str:,=%    
)|Find /i "%%A,%%B" "%%B.txt" >NUL 2>&1|(echo.>>"%%B.txt")    

но так как мне нравятся однострочные скрипты, я брошу это решение для самого чистого вида

2
отвечен Flaver-D 2022-12-06 12:33

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх