Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
 Аватар для vavun
10593 / 5556 / 865
Регистрация: 07.04.2013
Сообщений: 15,660

Как избавиться от символов \??\ в выводе списка драйверов wmic?

09.03.2016, 18:44. Показов 4473. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую

Есть скрипт:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
@echo off
 
set TAG=????
 
if "%TAG%"=="????" set /p "TAG=Введите тег для поиска: "
for /f "tokens=2 delims==" %%i in ('"wmic sysdriver get PathName /value"') do (
    for /f "delims=" %%j in ("%%i") do (
        strings "%%~j" | findstr /i "%TAG%">nul && echo %%j
))
echo.
pause
Суть - ищет определенные теги в используемых в данный момент системой драйверах с использованием программы strings

Но в выводе wmic sysdriver get PathName /value иногда попадается вот такое безобразие \??\ (строки 16 и 19)
Пример вывода:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
PathName=C:\Windows\system32\drivers\wimmount.sys
 
 
PathName=C:\Windows\system32\drivers\wmiacpi.sys
 
 
PathName=C:\Windows\system32\drivers\ws2ifsl.sys
 
 
PathName=C:\Windows\system32\drivers\WudfPf.sys
 
 
PathName=C:\Windows\system32\DRIVERS\WUDFRd.sys
 
 
PathName=\??\C:\Program Files\Process Hacker 2\kprocesshacker.sys
 
 
PathName=\??\C:\Windows\system32\drivers\myfault.sys
strings такое безобразие игнорирует.


Если убрать \??\, то проблем нет
Вопрос:
Как избавится от \??\ сохранив работоспособность скрипта ?

Заранее благодарю.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.03.2016, 18:44
Ответы с готовыми решениями:

Лишняя строка в выводе Wmic
Не очень понял из мануалов, буду благодарен, если кто доступным языком объяснит как выводит (и можно ли это изменить) wmic. На примере...

Как избавиться от погрешности при выводе double?
После того, как считал строку "3,2", перевожу во float, затем складываю с другим числом и получаю хрень непонятную что-то вроде 1,2+2=...

Как избавиться от мерцания при выводе массива?
вообщем есть массив 20x50. и его нужно часто выводит на консоль и происходит мерцание. что можно сделать чтоб его не было?

41
 Аватар для volodin661
7159 / 2347 / 354
Регистрация: 10.12.2013
Сообщений: 8,140
14.03.2016, 08:42
Студворк — интернет-сервис помощи студентам
чтобы 2 раза не вставать,
долью в эту же тему продолжение, может быть потом переброшу в свежую.

Использование 'сырого XML' после WMIC GET /format:rawxml (продолжение)

в 1-ой части я использовал язык XSL для трансформации вывода после WMIC,
а сейчас покажу, как то же самое можно сделать с помощью языка XQUERY,
который безусловно гораздо круче по удобству и выразительности.

на Microsoft придётся забить болт и скачать XSLT-процессор с сайта Saxonica Майкла Кея
( https://sourceforge.net/projec... e/download )
это бесплатная версия 'HomeEdition', она урезанная в части самых крутых фич, но вполне годная
и собрана под платформу .NET.

после установки появятся две утилиты QUERY.EXE и TRANSFORM.EXE соответственно для
xquery и xsl-преобразований.

итак, после wmic sysdriver get pathname /format:rawxml
применяю xquery для вытаскивания значений из всех тэгов VALUE,
стираю бяку \??\ в начале имени драйвера и прицепляю символ 'новой строки' для последующей беспроблемной
обработки FOR /F () DO () интерпретатором cmd

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    @ECHO off
 
    WMIC SysDriver get Pathname/FORMAT:rawxml   > my.xml
    CALL :gen_query                             > my.xquery
    QUERY -q:my.xquery -s:my.xml !method=text   > my.result
    FOR /F %%x in (my.result) DO (
        ECHO %%x
    )   
    
    CALL :cleanup
    EXIT /B
 
:cleanup    
    DEL my.xml
    DEL my.xquery
    DEL my.result    
    EXIT /B
 
:gen_query
    ::одну птичку ^ съест интерпретатор cmd
    ECHO    let $nl   := '^
'
    ECHO    let $БЯКА := '^^\\[?][?]\\'
    ECHO    for $x in /.//VALUE/concat( ., $nl )
    ECHO    return replace($x, $БЯКА, '') 
    EXIT /B
сам сгенерированный файлик my.xquery вот:
Bash
1
2
3
4
let $nl   := '
'
let $БЯКА:= '^\\[?][?]\\'
for $x in /.//VALUE/concat( ., $nl )
return replace($x, $БЯКА, '')
как видите, чудовищного размера;
переменная $БЯКА - это полноценное перловое регулярное выражение (PCRE)
переменная $nl - это символ перевода на новую строку,
а /.//VALUE - это XPath-выражение - выборка всех узлов VALUE независимо от уровня вложения,
начиная от корневого узла

с одной стороны можно конечно сказать, что данный подход - из пушки по воробьям -
для этой задачи может и да, но в целом - единообразная обработка XML стандартизированным способом это
весьма благородно, а язык XQUERY вовсю используется например в MSSQL, так что накопленные знания
даром не пропадут.
1
 Аватар для volodin661
7159 / 2347 / 354
Регистрация: 10.12.2013
Сообщений: 8,140
26.03.2016, 23:12
добавлю:
в упрощенном виде, можно обойтись без генерации файла-xquery,
написав запрос непосредственно после ключа -qs

например, чтобы получить все узлы содержащие текст "ntfs":
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
    @ECHO OFF
    
    WMIC SysDriver get Pathname/FORMAT:rawxml ^
    > my.xml    
    
    QUERY -s:my.xml !method=adaptive ^
          -qs:" for $x in //VALUE where matches($x, 'ip') return $x " "^
    > my.result
 
    FOR /F %%x in (my.result) DO (
            ECHO %%x
    )
Резюмирую:
под Windows* сейчас есть стандартизированный инструмент,
который позволяет обрабатывать XML-документы любого размера
и сложности.
Реализован он на двух программных технологиях
1) Java
2) .Net

(*) по факту мультиплатформенный, работает там, где работает Java

К нему есть функции расширения см. ниже
Кликните здесь для просмотра всего текста

в пространстве имен fn:
abs
accumulator-after
accumulator-before
adjust-date-to-timezone
adjust-dateTime-to-timezone
adjust-time-to-timezone
analyze-string
apply
available-environment-variables
avg
base-uri
boolean
ceiling
codepoint-equal
codepoints-to-string
collation-key
collection
compare
concat
contains
contains-token
copy-of
count
current
current-date
current-dateTime
current-group
current-grouping-key
current-merge-group
current-merge-key
current-time
data
dateTime
day-from-date
day-from-dateTime
days-from-duration
deep-equal
default-collation
default-language
distinct-values
doc
doc-available
document
document-uri
element-available
element-with-id
empty
encode-for-uri
ends-with
environment-variable
error
escape-html-uri
exactly-one
exists
false
filter
floor
fold-left
fold-right
for-each
for-each-pair
format-date
format-dateTime
format-integer
format-number
format-time
function-arity
function-available
function-lookup
function-name
generate-id
has-children
head
hours-from-dateTime
hours-from-duration
hours-from-time
id
idref
implicit-timezone
in-scope-prefixes
index-of
innermost
insert-before
iri-to-uri
json-doc
json-to-xml
key
lang
last
load-xquery-module
local-name
local-name-from-QName
lower-case
matches
max
min
minutes-from-dateTime
minutes-from-duration
minutes-from-time
month-from-date
month-from-dateTime
months-from-duration
name
namespace-uri
namespace-uri-for-prefix
namespace-uri-from-QName
nilled
node-name
normalize-space
normalize-unicode
not
number
one-or-more
outermost
parse-ietf-date
parse-json
parse-xml
parse-xml-fragment
path
position
prefix-from-QName
put
QName
random-number-generator
regex-group
remove
replace
resolve-QName
resolve-uri
reverse
root
round
round-half-to-even
seconds-from-dateTime
seconds-from-duration
seconds-from-time
serialize
serialize-json
snapshot
sort
starts-with
static-base-uri
string
string-join
string-length
string-to-codepoints
subsequence
substring
substring-after
substring-before
sum
system-property
tail
timezone-from-date
timezone-from-dateTime
timezone-from-time
tokenize
trace
transform
translate
true
type-available
unordered
unparsed-entity-public-id
unparsed-entity-uri
unparsed-text
unparsed-text-available
unparsed-text-lines
upper-case
uri-collection
xml-to-json
year-from-date
year-from-dateTime
years-from-duration
zero-or-one

в пространстве имен math:
acos
asin
atan
atan2
cos
exp
exp10
log
log10
pi
pow
sin
sqrt
tan

в пространстве имен map
contains
entry
for-each
get
keys
merge
put
remove
size

в пространстве имен array:
append
filter
flatten
fold-left
fold-right
for-each
for-each-pair
get
head
insert-before
join
remove
reverse
size
sort
subarray
tail

в пространстве имен saxon
adjust-to-civil-time
analyze-string
base64Binary-to-octets
base64Binary-to-string
column-number
compile-query
compile-stylesheet
current-mode-name
decimal-divide
deep-equal
discard-document
eval
evaluate
evaluate-node
expression
get-pseudo-attribute
has-same-nodes
hexBinary-to-octets
hexBinary-to-string
highest
in-summer-time
index
is-defaulted
is-whole-number
key-map
last-modified
leading
line-number
lowest
namespace-node
octets-to-base64Binary
octets-to-hexBinary
parse
parse-html
path
print-stack
query
read-binary-resource
schema
send-mail
serialize
sort
stream
string-to-base64Binary
string-to-hexBinary
string-to-utf8
system-id
transform
type
type-annotation
unparsed-entities
validate

в пространстве имен exslt-dates-and-times:
add
add-duration
date
date-time
day-abbreviation
day-in-month
day-in-week
day-in-year
day-name
day-of-week-in-month
difference
duration
hour-in-day
leap-year
minute-in-hour
month-abbreviation
month-in-year
month-name
second-in-minute
seconds
sum
time
week-in-month
week-in-year
year

в пространстве имен expath-binary:
and
bin
decode-string
encode-string
find
from-octets
hex
insert-before
join
length
not
octal
or
pack-double
pack-float
pack-integer
pad-left
pad-right
part
shift
to-octets
unpack-double
unpack-float
unpack-integer
unpack-unsigned-integer
xor

в пространстве имен expath-file
append
append-binary
append-text
append-text-lines
copy
create-dir
create-temp-dir
create-temp-file
delete
dir-separator
exists
is-dir
is-file
last-modified
line-separator
list
move
name
parent
path-separator
path-to-native
path-to-uri
read-binary
read-text
read-text-lines
resolve-path
size
temp-dir
write
write-binary
write-text
write-text-lines


Как им(Ынструментом) пользоваться я показал.

Остался вопрос - зачем сейчас он нужен на Виндовс при наличии powershell?

первый очевидный довод: пригодится на машинах, где нет .NET ( но есть Java )
( установка весьма проста - просто копирование файла saxon9he.jar в какое-нить место )

над остальными я думаю ...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.03.2016, 23:12

Как избавиться от экспоненциального вида при выводе числа
Вот программа, которая вычисляет факториалы чисел от 0 до 20. Факториал для чисел от 10 до 20 представляется в экспоненциальной форме. Как...

Как избавиться от служебных символов в Word-е?
Смысл вот в чем, есть таблица(в Ворде) данные из которой надо обработать. В каждой ячейке таблицы встречается множество служ. символов...

Как избавиться от лишних символов в строке
Помогите,пожалуйста.Битый час ломаю голову. Почему строку p выводит с заколючками? int main() { setlocale(LC_ALL,...

Как избавиться от управляющих символов при чтении из файла?
кто знает как избавиться от управляющих символов при чтении из файла using System; using System.Text; using System.Threading; ...

Как убрать лишние символы при выводе в консоль списка файлов?
Поясните, пожалуйста. Собираю кроссплатформенные методы, для работы с файлами. Взял для разбора такой метод. Всё работает, только вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
42
Ответ Создать тему
Новые блоги и статьи
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru