Показать полную графическую версию : [решено] Не производится выгрузка значений из WMIC с счетчиком.
Добрый день друзья, при выгрузке обновлений через WMIC столкнулся с проблемой: если прописать то список обновлений нормально выгружается. но по чему то между ними проставляются пробелы.
For /F "Tokens=1,3* Delims=,:" %%A In ('WMIC QFE GET HotFixID /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do echo UPDATE; %%B %TW2%
А если добавить счетчик для нумерации списка обновлений, то выгрузка не производится вообще, подскажите где я не прав во втором варианте и как убрать пустую строку в CSV файле между выгруженными значениями?
Set TW2=^>^>2_%computername%.CSV
For /F "Tokens=1,3* Delims=,:" %%A In ('WMIC QFE GET HotFixID /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do ((Set UPDATE=%%B) & (Set /a K+=1) & (echo %K%; %UPDATE% %TW2%))
Foreigner
08-02-2016, 17:43
@echo off
setlocal enabledelayedexpansion
for /f "tokens=2 delims==" %%i in ('wmic qfe get hotfixid /value') do (
if not "%%i"=="" (
set /a cnt+=1
1>>"%computername%.csv" echo !cnt!;%%i
)
)
Foreigner, тут тоже надо по-хорошему вывод «wmic.exe» через двойное раскрытие делать, поскольку получается опять CrCrLf:
http://i.imgur.com/OGEmEMe.png
Надо полагать, это:
и как убрать пустую строку в CSV файле между выгруженными значениями? »
именно о сём, поскольку CrCrLf приводит к:
http://i.imgur.com/v5wjj5q.png
Foreigner, спасибо, считает отлично, если можно в 2х словах в чем косяк моего варианта, почему выгрузка не производилась?
Iska, можете объяснить откуда берутся CrCrLf при выгрузке и как от них можно избавиться?
Foreigner
09-02-2016, 11:22
почему выгрузка не производилась? »
Вы явно перемудрили с findstr и more и с выводом в формате csv (вы берете 1 и 3* токены, а их только 2 (имя компьютера и сам хотфикс))
Так чтобы не было пустых строк и пробелов:
@echo off
for /f "skip=2 delims=" %%m in ('wmic path Win32_OperatingSystemQFE get /format:csv') do (
for /f "tokens=4 delims==," %%a in ("%%~m") do (
if not "%%~a"=="" set /a cnt+=1
1>>"%computername%.csv" cmd /v /c "echo !cnt!;%%~a"
))
exit
.
Iska, можете объяснить откуда берутся CrCrLf при выгрузке »
Они берутся из особенностей разбора юникодного вывода утилиты «wmic.exe».
и как от них можно избавиться? »
Двойным разбором по «for /f». Опробуйте, например, код коллеги alpap.
Foreigner
10-02-2016, 09:02
тут тоже надо по-хорошему вывод «wmic.exe» через двойное раскрытие делать, поскольку получается опять CrCrLf »
Это вы где такую картинку увидели? У меня нет никаких CrCrLf.
> (gc .\$env:computername.csv)[0]
1;KB3116900
> (gc .\$env:computername.csv)[0].length
11
http://s12.postimg.org/fswjbhwuh/image.png (http://postimage.org/)
Это вы где такую картинку увидели? »
Открыл результирующий файл в Far Manager'е (F3, затем F4).
У меня нет никаких CrCrLf. »
А выложите Ваш результирующий файл. Не факт, что «Get-Content» не вносит свои коррективы.
Foreigner
10-02-2016, 10:28
выложите Ваш результирующий файл »
Хотя судя по размеру, там явно что-то не так.
Угу. У Вас там ровно так же каждая строка оканчивается — \0x0D,\0x0D,\0x0A. А «Get-Content», значит, «умеет» такие несуразицы воспринимать корректно.
Всем большое спасибо за помощь и разъяснения!
Добрый день, друзья прикрутил код alpap к выгрузке винтов, все отлично работает, но как только попытался вынести код в отдельную функцию см (вариант 2) результат не выводится подскажите где косяк?
Set TW1=^>^>%computername%.CSV
for /f "skip=2 delims=" %%m In ('WMIC DISKDRIVE Where InterfaceType^=^'IDE^' GET Model /format:csv') Do (
for /f "tokens=2 delims==," %%a in ("%%~m") do (
if not "%%~a"=="" set /a cnt+=1
%TW1% cmd /v /c "echo HDD!cnt!;%%~a"
))
exit
Set TW1=^>^>%computername%.CSV
for /f "skip=2 delims=" %%m In ('WMIC DISKDRIVE Where InterfaceType^=^'IDE^' GET Model /format:csv') Do (
Call :123 "%%~m"
)
Exit
:123
for /f "tokens=2 delims==," %%a in ("%%~m") do (
if not "%%~a"=="" set /a cnt+=1
%TW1% cmd /v /c "echo HDD!cnt!;%%~a"
)
Exit /B
Как минимум, здесь:
for /f "tokens=2 delims==," %%a in ("%~1") do (
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.