![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] вывод строки из *.xml |
|
|
CMD/BAT - [решено] вывод строки из *.xml
|
Пользователь Сообщения: 52 |
Добрый день!
Есть папка, в которую закачиваются файлы с ftp несколько раз в день. Названия файлов типа:3143719278_1605201290029.xml Необходимо прочитать все файлы в папке, и вывести из каждого файла то, что содержится в строке <InsuranceNumber>94595</InsuranceNumber> , т.е. в этом случае вывести 94595. Причем итоговое значение д.б. таким : первая часть имени файла остается той же, т.е. 3143719278, а через _ добавляем 94595. Получаем на выходе: 3143719278_94595 Если же поле InsuranceNumber пустое, то вывести 3143719278_0. Каким образом это можно сделать или вообще можно? |
|
Отправлено: 16:46, 28-06-2012 |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать @Echo on SetLocal EnableDelayedExpansion Set Path=%Path%;C:\Users\Diman\Desktop\KDL\grep+parseXML\bin Set XMLPath=C:\Users\Diman\Desktop\KDL\XML For /F "delims=" %%F In ('Dir "%XMLPath%\*.xml" /B 2^>nul') Do ( Set Prefix=&Set InsuranceNumber=0 For /F "tokens=1,2 delims=_." %%P In ("%%~F") Do (Set Prefix=%%P&Set Suffix=%%Q) For /F "tokens=2 delims=><" %%N In ('grep -Eo "<LastName>[^<]*</LastName>" "%XMLPath%\%%F"') Do (If Not %%N==/LastName Set LastName=%%N) For /F "tokens=2 delims=><" %%N In ('grep -Eo "<InsuranceNumber>[^<]*</InsuranceNumber>" "%XMLPath%\%%F"') Do ( If Not %%N==/InsuranceNumber Set InsuranceNumber=%%N ) Call :StringLen "!InsuranceNumber!" If !$StringLen!==5 (Echo !Prefix!_!InsuranceNumber!_!LastName!|recode utf8..cp1251/>>"C:\Users\Diman\Desktop\KDL\result5and6.txt") If !$StringLen!==6 (Echo !Prefix!_!InsuranceNumber!_!LastName!|recode utf8..cp1251/>>"C:\Users\Diman\Desktop\KDL\result5and6.txt") If Not !$StringLen!==5 ( If Not !$StringLen!==6 ( Echo !Prefix!_!InsuranceNumber!_!LastName!|recode utf8..cp1251/>>"C:\Users\Diman\Desktop\KDL\result_other.txt" ) ) ) Pause&Exit :StringLen :: Автор функции - amel27, http://forum.oszone.net/post-1162296-2.html Set $StringLen=0&Set $StringBuf=%~1 If ""=="%~1" GoTo :EOF :StringLenLoop Set /A $StringLen+=1 Call Set $StringChr=%%$StringBuf:~%$StringLen%%% If ""=="%$StringChr%" GOTO :EOF GoTo :StringLenLoop |
Отправлено: 20:09, 07-07-2012 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать LAKERS824, попробуйте запустить вот этот скрипт: http://rghost.ru/39092099
Настройки пути к xml вынесены в файл settings.ini. На вашем файле отработало успешно. |
Отправлено: 22:45, 07-07-2012 | #22 |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать В принципе работает, но я заметил следующее, если в строке
я пишу свой путь, т.е. то файл и создается пустым. Не пойму в чем дело? А если я оставляю , то вроде все ок, я же ведь более нигде не указываю %CD% блин, на XP работает, как описал выше, переношу те же файлы на Windows 7 64-бит, меняю только пути и опять создается пустой файл один |
Отправлено: 23:04, 07-07-2012 | #23 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Объясните смысл замены %CD%\bin на вписанный вами вручную абсолютный путь? Не меняйте пожалуйста код, если он работает и нет веской причины его переделывать.
Почему именно после вашей модификации перестает работать точно не скажу, попробуйте сравнить вывод Echo %CD% с тем, что вы вписываете как абсолютный путь. |
Отправлено: 23:17, 07-07-2012 | #24 |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать перенес на 2003 винду, тоже создается пустой файл.
Set Path=%Path%;%CD%\bin - эта строка указывает пусть к grep+parseXML? Ведь у меня в папке, скажем D:\papka есть папка grep+parseXML\bin, а также в корне papka\bin - которая от recode. Так верхний путь не может находить неверный путь? |
Отправлено: 23:43, 07-07-2012 | #25 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Цитата LAKERS824:
Цитата LAKERS824:
Плюс к тому, преимущество записи Set Path=%Path%;%CD%\bin - в портабельности самого скрипта, в нем нету абсолютных путей, его можно переносить куда угодно, и на другом ПК он будет работать точно так же (если не забудут скопировать директорию bin вместе с ним). |
||
Отправлено: 23:50, 07-07-2012 | #26 |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать спасибо, разобрался с папкой bin и все встало на свои места. СПАСИБО.
|
Отправлено: 00:09, 08-07-2012 | #27 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Win32 API - Вывод картинок | Lev | Программирование и базы данных | 11 | 12-02-2010 19:38 | |
MySQL - Автозамена строки из другой строки - trigger? procedure ? | BugZZ | Программирование и базы данных | 0 | 18-09-2009 09:51 | |
Вывод на печать???? | Novistok | Microsoft Windows NT/2000/2003 | 4 | 08-11-2005 10:52 | |
Вывод на телевизор | dascon | Программное обеспечение Windows | 15 | 04-09-2004 06:55 | |
постраничный вывод | chem1 | Вебмастеру | 4 | 16-01-2004 22:46 |
|