![]() |
Поиск тега с помощью bat
Всем Привет.
Подскажите решение проблемы: мне нужно что бы bat-ник в xml фаиле (текст идет сплошняком) находил тег <ID>*****</ID> и выводил его на экран и как опция брал его еще и буфер (если возможно), фаил лежит всегда по одному пути (меняется только буква диска, поэтому нужна переменная с запросом диска), максимум что я смог сделать это: echo off cls set /p x=Enter Letter: for /f "usebackq tokens=*" %%a in ("%x%:\1\file.txt") do (echo %%~a) pause но оно работает только в txt =( и выводит все. PS Извиняюсь за безграмотность (если глупость написал), ожидаю всезнающего гуру в поисках просветления =) |
Цитата:
|
Попробовал так:
echo off cls Find /I "<ID>*</ID>" "C:\1\file.txt" pause Ищет только жестко название т.е. <ID>*</ID> а не <ID>321</ID>, а xml вообще проигнорировал и выдал все что было в нем =( Windows XP x32 и Windows 7 x32 Кодировка уже 6 лет не менялась, по крайней мере в этих фаилах |
maxd2007, Батник без сторонних утилит плох для работы с текстом, я бы использовал PowerShell, но без примера файла ( валидного xml ), это пустой разговор. Попробуйте такой вариант, с учетом, что файл однострочный и в нем один элемент "ID":
Код:
@echo off |
батник закрывается я не успеваю прочитать (что там, ошибка или ....), команда pause не помогает. В атаче пример xml фаила. И если честно то я не совсем понял на счет делителя (((
|
maxd2007, У меня все отработало правильно, в консоль вывел 3684640102, тоже самое сохранилось в буфере обмена.
Расскажите, как запускаете. И надеюсь, что правильно прописали путь к GarminDevice.xml ( вместо 1.txt ), например: Код:
set /p content=<"D:\Downloads\GarminDevice.xml" Код:
$id = ( [xml] ( gc "D:\Downloads\GarminDevice.xml" )).device.id |
В атаче принт скрин того что и как я делаю, (черный экран это проскакивает скрипт), попробую еще на PowerShell сегодня и отпишусь
|
Цитата:
|
Блин извини это я из за того что не понял на счет делителя игрался и убрал их и забыл, а т.к. вечер был то забыл восстановить, а первый раз он закрывался сразу и я не видел что там, но сегодня (после Вашего последнего поста), вернул все как было и добавил "pause":
@echo off setlocal set /p content=<"C:\1\GarminDevice.xml" set "content=%content:<ID>=!%" set "content=%content:</ID>=!%" set "content=%content:<=^<%" set "content=%content:>=^>%" for /f "tokens=2 delims=!" %%i in ( "%content%" ) do ( echo %%i pause echo.%%i| clip ) Теперь я вижу номер =) (урааааа спасибо), но в буфер кстати не берет =( (т.е. когда нажимаю ctrl+v то появляется мой старый буфер, а не ID из xml ) |
Цитата:
|
Цитата:
|
|
У меня основная винда ХР х32 и да, по пути C:\Windows\System32\clip.exe этого фаила нет, может есть сторонние утилиты или может можно как то с 8 ки портировать
|
|
Спасибо всем большое, все работает как надо. Resource Kit не помог, но я нашел отдельно clip.exe и кинул его в windows\system32 и все теперь работает и берет в буфер.
|
Код:
#Powershell script. |
Помогите распарсить файл с выводом в переменные значения между тегами DISPLAYDESCRIPTION
Заморочка в наличии пробелов в искомых значениях. |
sov44, Вариант через задницу:
Код:
@echo off Код:
([xml](gc 11-1.txt)).WIM.IMAGE.DISPLAYDESCRIPTION |
sov44,
Код:
@echo off |
alpap, точно, "s=!s: =_!"
Скрипт считает, но долго. Есть-ли иной способ, более шустрый на bat или на гибридном бат? |
sov44, Чуток пошустрей:
Код:
@echo off |
sov44,
Вот так вот и быстро и более правильно: Код:
@echo off |
Время: 20:13. |
Время: 20:13.
© OSzone.net 2001-